正如标题所示,如何返回这样的指针:
xxxxxxx foo() {
static int arr[5][5];
return arr;
}
顺便说一下,我知道我至少必须指定一个维度的大小,但是如何做到呢?
正如标题所示,如何返回这样的指针:
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元素数组的表达式 T” 的类型会转换为类型“指向 T 的指针”。表达式 arr 的类型为“5元素数组的5元素数组 int”,因此它被转换为“指向 5 元素数组 int 的指针”,即 int (*)[5]。
(*a)[5]
是指向数组的指针,那么 (*f())[5]
就是返回指向数组的指针的函数。 - John Bodeint (*foo(void))[5][5]
吧? - MustSeeMelons&arr
,那就是这种情况。但我们不是这样做的。表达式arr
从类型为“5个元素的int数组的5个元素数组”衰减为“指向5个元素的int数组的指针”。 - John Bode对此,使用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是一个好主意。
typedef int MyArrayType[5];
,对吗? - Determinant