如何保持指向函数返回的数组中元素的指针?

时间:2011-10-17 01:15:09

标签: c# arrays pointers

我有一个大阵列。我将此数组赋予一个函数,该函数返回指向数组中特定元素的指针。或者,至少这是应该发生的事情。相反,函数返回后得到的指针是0x0000。什么?!

int* getPtr(int[] array)
{
    //there is guarenteed no indexOutOfBounds...
    fixed(int* p = array[4])
    return p;
}


Main()
{
    int[] massive = new int[10];
    int* p = getPtr(massive);
    Console.WriteLine((int)p);        //... address is 0... arg
}

2 个答案:

答案 0 :(得分:0)

我首先尝试给阵列一些值。如果你只是写出一个指向没有数据的内存位置的指针,就没有真正保证你得到什么。

答案 1 :(得分:0)

fixed完成的固定仅持续到受控语句(或块)结束。所以你的代码相当于:

fixed(int* p = array[4]) {
    return p;
}

函数返回后,钉扎不再有效。来自the documentation

  

执行语句中的代码后,将取消固定任何固定变量并进行垃圾回收。因此,不要指向固定语句之外的那些变量。