C#指针类型的默认值

use*_*392 13 c# pointers unsafe

我一直在搜索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);
   }

   ........
}
Run Code Online (Sandbox Code Playgroud)

这意味着当你与IntPtr.Zero它进行比较时,实际上是与分配给m_value具有类型的字段的默认值进行比较void*.

谢谢.

小智 -1

使用 Visual Studio 调试器,您可以获得分配给 int 指针的默认值。在 32 位架构中,它是 0x00000000(32 0 位)。

class Program
{
    private static unsafe int* m_value;
    static void Main(string[] args)
    {
    } // <<== Break point here
}

Watch Window
_____________________________________________
Name    Value       Type
======= ==========  ========
m_value 0x00000000  int*
Run Code Online (Sandbox Code Playgroud)

  • C# 规范非常谨慎地没有定义指针的默认值。 (3认同)
  • 是的,正如我所说,我编写了一个测试应用程序来执行此操作,但这并不一定意味着该值将始终为零(这可能只是运气)。 (2认同)