int *workaround2()
{
int temp[6][6] = {{0}}; // initializes a temporary array to zeros
int *result = malloc(sizeof(int) * 6 * 6); // allocates a one-dimensional array
memcpy(result, temp, sizeof(int) * 6 * 6); // copies stuff
return result; // cannot return an array but can return a pointer!
}
使用结构体 Package
这听起来很傻,但函数可以返回结构,即使它们不能返回数组!即使返回的结构包含数组。
struct array_inside
{
int array[6][6];
};
struct array_inside workaround3()
{
struct array_inside result = {{{0}}};
return result;
}
3条答案
按热度按时间hmae6n7t1#
C语言有一个基本的缺陷:从函数返回数组是不可能的。对此有许多变通办法;我讲三个。
替换为数组指针
返回一个指针而不是数组本身。这导致了C中的另一个问题:当一个函数返回一个指向某物的指针时,它通常应该动态地分配某物。您不应该忘记在以后(不再需要该阵列时)解除分配此配置。
替换为int指针
一个二维数组在内存中显示为一个数字序列,所以你可以用指向第一个元素的指针来替换它。您明确表示要返回一个数组,但您的示例代码返回一个指向int的指针,因此您可以相应地更改其余代码。
使用结构体 Package
这听起来很傻,但函数可以返回结构,即使它们不能返回数组!即使返回的结构包含数组。
lmvvr0a82#
这听起来像是你想要一个 * 函数返回指向int* 的数组[6]的指针:
你可以这样调用和使用它:
sz81bmfz3#
试试这个,在我的Mac上用GCC编译很好。