【问题标题】:Why can't we take a pointer to a string?为什么我们不能把指针指向一个字符串?
【发布时间】:2014-09-11 08:41:36
【问题描述】:

使用以下代码:

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();
}

会产生编译错误:

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

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

【问题讨论】:

标签: c# pointers intptr


【解决方案1】:

原因是托管对象可以在内存中移动,这是对其他对象进行垃圾回收的副作用,从而使指向它们的任何指针无效。

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

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2021-12-04
    • 2022-10-20
    • 1970-01-01
    • 2021-03-17
    • 2018-01-22
    • 2015-11-02
    • 2012-06-19
    相关资源
    最近更新 更多