这可能看起来很奇怪,但在 C (size_t)(void*)0 == 0 中,语言规范不保证。允许编译器使用任何他们想要的 null 值(尽管他们几乎总是使用 0。)
在 C# 中,您可以将 null 或 (T*)0 分配给不安全代码中的指针。
- 有什么区别吗?
- (long)(void*)0 == 0 (保证与否?换句话说:IntPtr.Zero.ToInt64() == 0)
MSDN 对 IntPtr.Zero 有这样的说法:
“该字段的值不等于null。” 好吧,如果您想与 C 代码兼容,那很有意义 - 如果互操作没有转换为 C 空指针,它将毫无价值。但我想知道 IntPtr.Zero.ToInt64() == 0 是否可能,即使在内部 IntPtr.Zero 是其他一些值(CLR 可能会也可能不会在强制转换操作中将 null 转换为 0)
不是这个问题的重复