为什么我们不能指向字符串?

时间:2014-09-11 08:41:37

标签: c# pointers intptr

使用以下代码:

static unsafe void Main( string[] args )
{
  int a = 5;
  IntPtr pa = new IntPtr( &a );  // no error
  var xa =  pa.ToPointer();

  string b = "test";
  IntPtr pb = new IntPtr( &b );   // compile error
  var xb = pb.ToPointer();
}

它生成编译错误:

无法获取地址,获取大小或声明指向托管类型的指针('类型')

指向托管类型的指针有什么问题?

1 个答案:

答案 0 :(得分:1)

原因是托管对象可以在内存中移动,作为其他对象的垃圾收集的副作用,从而使任何指针无效。

你正在获取地址的int在堆栈中,并且不会在内存中移动 - 因此可以安全地访问指向它的指针。 (好吧,就像使用指针一样安全......)

相关问题