如何在C中返回二维指针?

正如标题所示,如何返回如下指针:

xxxxxxx foo() { static int arr[5][5]; return arr; } 

BTW。 我知道我必须至少指定一个维度的大小,但是如何?

它有助于为此使用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对于这种情况是个好主意。

返回类型是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 

请记住,在大多数情况下,类型为“N元素数组T ”的表达式将转换为“指向T指针”。 表达式arr的类型是“5元素数组int的5元素数组”,因此它被转换为“指向5元素数组的int ”或int (*)[5]