如何 return 从函数指向数组的指针?

How to return pointers to arrays from functions?

我想要一个函数 return 一个指向大小为 10 的数组的指针。这样一个函数的原型是什么?

我已经尝试了 3 种不同的原型,但都不起作用:

int(*)[10] returnPtrArray(int (*arr)[10])
{
    return arr;
}
//The return type doesn't seem to work

int(*)[10] returnPtrArray(int[][10]);
int (returnPtrArray(int[][10])(*)[10];
int(*)(returnPtrArray(int[][10])[10];
//none of these prototypes seem to work

//calling
int main()
{
    int a[5][10];
    int (*ptr)[10] = returnPtrArray(&a);
    //How do I make this work?
}

除了类型之外,指针不知道它们指向什么。如果你需要传递一个数组,你需要在一个单独的参数中传入一个指针和数组的长度(或者使用像std::vector这样的列表实现)。

函数的正确定义是:

int (*returnPtrArray(int (*arr)[10]))[10]
{
    return arr;
}

分解:returnPtrArray 是一个函数:

returnPtrArray()

接受一个指向 10 数组的指针 int:

returnPtrArray(int (*arr)[10])

和returns一个指针:

*returnPtrArray(int (*arr)[10])

到大小为 10 的数组:

(*returnPtrArray(int (*arr)[10]))[10]

属于int

int (*returnPtrArray(int (*arr)[10]))[10]

你会这样称呼它:

int a[5][10];
int (*ptr)[10] = returnPtrArray(a);

试试这个原型:

int (*returnPtrArray(int (*arr)[10]))[10];

这是一个名为 returnPtrArray 的方法,并将指向 10 个整数的数组的指针作为参数。

它returns一个指向 10 个整数数组的指针。

Live demo 中查看,我从方法调用的参数中删除了 &,因为它是错误的。


此答案基于更具分析性的 post Declare a C/C++ function returning pointer to array of integer pointers