gpt4 book ai didi

c - 如何通过引用传递动态分配的二维数组中的子数组?

转载 作者:太空宇宙 更新时间:2023-11-04 01:11:25 24 4
gpt4 key购买 nike

我需要传递引用子数组,它们是动态分配的二维数组的一部分。我尝试了以下方法,但似乎不起作用。如果可能的话有什么想法吗?

void set1(int *a){
a = malloc(2*sizeof(int));
a[0] = 5;
a[1] = 6;
}

void set2(int *a){
a = malloc(2*sizeof(int));
a[0] = 7;
a[1] = 8;
}

int main(){
int **x = malloc(2*sizeof(int*));

set1(x[0]);
set2(x[1]);

return 0;
}

最佳答案

您需要传递子数组的地址,如本例所示:

void set(int ** a)
{
*a = malloc(2 * sizeof(int));
(*a)[0] = 4;
(*a)[1] = 9;
}

int main(void)
{
int ** x = malloc(2 * sizeof(int*));
set(&x[0]);
set(&x[1]);
}

每当你有一个函数需要在调用者的范围内修改某些东西时,你需要在函数中取消引用(比如我们的 *a)和调用者的地址(比如 &x[0]).

(相比之下,您的代码将指向已分配内存的指针分配给局部变量(即 myArray),该变量在函数返回时丢失。内存也随之丢失。)

关于c - 如何通过引用传递动态分配的二维数组中的子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11926425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com