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

C# 如何在从函数返回的数组中保留指向元素的指针?,c#,arrays,pointers,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]; i

我有一个大数组。我将这个数组赋给一个函数,该函数返回指向数组中特定元素的指针。或者,至少这是应该发生的事情。相反,我在函数返回后得到的指针是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;
}
函数返回后,固定不再有效。发件人:

执行语句中的代码后,所有固定变量都将取消固定并接受垃圾收集。因此,不要指向固定语句之外的变量


那么,我是否也应该在Main中修复数组?当然,这听起来似乎是一种可行的方法。如果你那样做会发生什么?