我搞砸了这个,但我真的不明白.
这是我想要做的:将一个2D char数组作为函数的输入,更改其中的值,然后返回另一个2D char数组.
而已.相当简单的想法,但想法不能在C中轻松工作.
任何想让我以最简单的形式开始的想法都值得赞赏.谢谢.
解决方法
C不会从函数返回数组.
你可以做几件可能足够接近的事情:
>您可以在struct中打包数组并返回该数组. C将从函数中返回结构.缺点是这可能会有很多内存来回复制:
struct arr { int arr[50][50]; } struct arr function(struct arr a) { struct arr result; /* operate on a.arr[i][j] storing into result.arr[i][j] */ return result; }
>您可以返回指向数组的指针.该指针必须指向使用malloc(3)为数组分配的内存. (或者另一个不从堆栈分配内存的内存分配原语.)
int **function(int param[][50]) { int arr[][50] = malloc(50 * 50 * sizeof int); /* store into arr[i][j] */ return arr; }
void function(int param[][50]) { /* operate on param[i][j] directly -- destroys input */ }
>您可以将参数用作“输出变量”,并使用它来“返回”新数组.如果您希望调用者分配内存或者您想要指示成功或失败,那么这是最好的:
int output[][50]; int function(int param[][50],int &output[][50]) { output = malloc(50 * 50 * sizeof int); /* write into output[i][j] */ return success_or_failure; }
或者,为调用者分配:
int output[50][50]; void function(int param[][50],int output[][50]) { /* write into output[i][j] */ }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。