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

本文关键字:元素 指针 保留 数组 函数 返回 | 更新日期: 2023-09-27 18:11:20

我有一个很大的数组。我将这个数组赋给一个函数,该函数返回指向数组中特定元素的指针。或者,至少应该是这样。相反,函数返回后我得到的指针是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
}

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

我会尝试先给数组一些值。如果你只是写一个指针,指向一个没有数据的内存位置,那就不能保证你会得到什么。

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

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

函数返回后,绑定不再有效。来自文档:

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