c语⾔函数返回值⼆维数组,从函数返回⼀个⼆维数组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;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论