Das mag seltsam erscheinen, aber in C (size_t) (void *) ist 0 == 0 nicht durch die Sprachspezifikation garantiert. Compiler dürfen einen beliebigen Wert für null verwenden (obwohl sie fast immer 0 verwenden).Gibt es einen Unterschied zwischen null und 0 beim Zuweisen von Zeigern in unsicheren Code?
In C# können Sie einem Zeiger in unsicheren Code null oder (T *) 0 zuweisen.
- Gibt es einen Unterschied?
- (long) (void *) 0 == 0 (garantiert oder nicht um es anders auszudrücken: IntPtr.Zero.ToInt64() == 0)
MSDN hat dies über IntPtr zu sagen. Null:
"Der Wert dieses Feldes entspricht nicht Null." Nun, wenn Sie mit C-Code kompatibel sein wollen, macht das sehr viel Sinn - es wäre für Interop wertlos, wenn es nicht in einen C-Null-Zeiger umgewandelt würde. Aber ich möchte wissen, ob IntPtr.Zero.ToInt64() == 0 die möglicherweise möglich ist, auch wenn intern IntPtr.Zero ist ein anderer Wert (die CLR kann oder nicht konvertieren Null in 0 in der Besetzung Operation)
Kein Duplikat von this question
Ah yeh, ich habe vergessen, dass Standard auf Zeiger funktioniert. Das ist eine schöne Lösung. – Eloff