我一直在搜索 C# 语言规范,但找不到任何说明是否使用默认值初始化指针类型(例如 int*
)的内容。我创建了一个简单的测试应用程序,它似乎将它们初始化为零,但我想用规范确认这一点。
我开始寻找这个是因为我在反射器中注意到 IntPtr
类使用这个代码来定义它的 IntPtr.Zero
:
public struct IntPtr : ISerializable
{
private unsafe void* m_value;
public static readonly IntPtr Zero;
.......
public static unsafe bool operator ==(IntPtr value1, IntPtr value2)
{
return (value1.m_value == value2.m_value);
}
........
}
这意味着当您与
IntPtr.Zero
进行比较时,它实际上是与分配给类型为 m_value
的 void*
字段的默认值进行比较。谢谢。
最佳答案
我相信指针没有默认值;由于指针的值是包含您分配给它的某些内容的内存部分的地址。如果您尚未分配它,则它可能指向内存中的任何内容。
也许 CLR 的默认行为是将其设置为 IntPtr.Zero ,它“表示已初始化为零的指针或句柄”,这看起来很可能来自 Carmelo Floridia 的回答。这似乎是规范可能没有详细说明的实现细节。
关于C# 指针类型的默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28366763/