Это может показаться странным, но в C (size_t) (void *) 0 == 0 не гарантируется спецификацией языка. Компиляторам разрешено использовать любое значение, которое они хотят для нуля (хотя они почти всегда используют 0.)
В C # вы можете присвоить нулевой или (T *) 0 указателю в небезопасном коде.
- Есть ли разница?
- (long) (void *) 0 == 0 (гарантировано или
не? Перефразируй:
IntPtr.Zero.ToInt64 () == 0)
В MSDN есть это, чтобы сказать о IntPtr.Zero:
"Значение этого поля не эквивалентно нулю." Хорошо, если вы хотите быть совместимым с кодом на C, это имеет большой смысл - было бы бесполезно для взаимодействия, если бы оно не конвертировалось в нулевой указатель на C. Но я хочу знать, возможно ли IntPtr.Zero.ToInt64 () == 0, даже если внутренне IntPtr.Zero является каким-то другим значением (CLR может или не может преобразовать ноль в 0 в операции приведения)
Не дубликат этого вопроса