正如标题所示,如何返回这样的指针:
xxxxxxx foo() {
static int arr[5][5];
return arr;
}
顺便说一句。我知道我必须至少指定一个维度的大小,但是如何?
答案 0 :(得分:14)
返回类型为int (*)[5]
(指向int
的5元素数组的指针),如下所示
int (*foo(void))[5]
{
static int arr[5][5];
...
return arr;
}
它分解为
foo -- foo
foo( ) -- is a function
foo(void) -- taking no parameters
*foo(void) -- returning a pointer
(*foo(void))[5] -- to a 5-element array
int (*foo(void))[5] -- of int
请记住,在大多数情况下,类型为“{-1}}的N元素数组”的表达式将转换为“指向T
的指针”。表达式T
的类型是“arr
的5元素数组的5元素数组”,因此它被转换为“指向int
的5元素数组的指针”,或{ {1}}。
答案 1 :(得分:13)
为此使用typedef很有帮助:
typedef int MyArrayType[][5];
MyArrayType * foo(void)
{
static int arr[5][5];
return &arr; // NB: return pointer to 2D array
}
如果由于某种原因你不想使用typedef,或者只是对上述函数的裸版看起来很好奇,那么答案是这样的:
int (*foo(void))[][5]
{
static int arr[5][5];
return &arr;
}
希望你能明白为什么在这种情况下使用typedef是一个好主意。