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;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值