如何 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。
我想要一个函数 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。