这可能看起来很奇怪,但在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空指针,那么Interop就毫无价值。但我想知道IntPtr.Zero.ToInt64() == 0是否可能,即使在内部IntPtr.Zero是其他值(CLR可能会在强制转换操作中将null转换为0)。
这不是此问题的重复。
在C#中,您可以在不安全代码中将null或(T*)0分配给指针。
有什么区别吗?
(long)(void*)0 == 0是否保证?换句话说:IntPtr.Zero.ToInt64() == 0
MSDN对IntPtr.Zero的解释如下:
"这个字段的值不等同于null。" 如果你想与C代码兼容,那么这就有了很多意义-如果它不能转换为C空指针,那么Interop就毫无价值。但我想知道IntPtr.Zero.ToInt64() == 0是否可能,即使在内部IntPtr.Zero是其他值(CLR可能会在强制转换操作中将null转换为0)。
这不是此问题的重复。