anatolyg..
19
C语言有一个基本缺陷:不可能从函数返回数组.这有很多变通方法; 我将描述三个.
用指向数组的指针替换
返回指针而不是数组本身.这导致了C中的另一个问题:当一个函数返回指向某个东西的指针时,它通常应该动态地分配一些东西.你不应该忘记稍后解除分配(当不再需要数组时).
typedef int (*pointer_to_array)[6][6];
pointer_to_array workaround1()
{
pointer_to_array result = malloc(sizeof(*result));
(*result)[0][0] = 0;
(*result)[1][0] = 0;
(*result)[2][0] = 0;
(*result)[3][0] = 0;
(*result)[4][0] = 0;
(*result)[5][0] = 0;
return result;
}
用指向int的指针替换
二维数组在内存中显示为一系列数字,因此您可以通过指向第一个元素的指针替换它.您明确声明要返回一个数组,但是您的示例代码返回一个指向int的指针,因此您可以相应地更改其余代码.
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!
}
用结构包裹
听起来很傻,但功能可以返回结构,即使它们不能返回数组!即使返回的结构包含数组.
struct array_inside
{
int array[6][6];
};
struct array_inside workaround3()
{
struct array_inside result = {{{0}}};
return result;
}