我一直在搜索 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_valuevoid* 字段的默认值进行比较。

谢谢。

最佳答案

我相信指针没有默认值;由于指针的值是包含您分配给它的某些内容的内存部分的地址。如果您尚未分配它,则它可能指向内存中的任何内容。

也许 CLR 的默认行为是将其设置为 IntPtr.Zero ,它“表示已初始化为零的指针或句柄”,这看起来很可能来自 Carmelo Floridia 的回答。这似乎是规范可能没有详细说明的实现细节。

关于C# 指针类型的默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28366763/

10-15 00:23