正如标题所示,如何返回这样的指针:
xxxxxxx foo() {
static int arr[5][5];
return arr;
}
顺便提一句。我知道我必须至少指定一个维度的大小,但是如何?
返回类型将是int (*)[5]
(指向 5 元素数组的指针int
),如下所示
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
请记住,在大多数情况下,“N-element array of T
”类型的表达式被转换为“pointer to T
”类型。表达式的类型arr
是“5 元素数组的 5 元素数组int
”,所以它被转换为“指向 5 元素数组的指针int
”,或者int (*)[5]
。
为此使用 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 是一个好主意。