gpt4 book ai didi

c - 在函数中传递二维数组 - 从 C 中的函数返回二维数组

转载 作者:行者123 更新时间:2023-11-30 19:18:57 25 4
gpt4 key购买 nike

所以我已经阅读了其他线程,但我无法弄清楚。我的代码如下并且工作正常。

double **sort(int counter, double **a){
int i, j;
double swap0, swap1;

for (i = 0 ; i < ( counter - 1 ); i++){
for (j = 0 ; j < counter - i - 1; j++){
if (a[0][j] > a[0][j+1]){
swap0 = a[0][j];
swap1 = a[1][j];
a[0][j] = a[0][j+1];
a[1][j] = a[1][j+1];
a[0][j+1] = swap0;
a[1][j+1] = swap1;
}
}
}

return a;
}

main(){

double **dist_table;
int i;

dist_table = (double **)calloc(2,sizeof(double*));
dist_table[0] = (double *)calloc(5,sizeof(double));
dist_table[1] = (double *)calloc(5,sizeof(double));

dist_table[0][0] = 5.1;
dist_table[1][0] = 0;
dist_table[0][1] = 6.1;
dist_table[1][1] = 1;
dist_table[0][2] = 3.1;
dist_table[1][2] = 2;
dist_table[0][3] = 2.1;
dist_table[1][3] = 3;
dist_table[0][4] = 7.1;
dist_table[1][4] = 4;

dist_table = sort(5, dist_table);
}

但是我读到作为参数传递 **a 是错误的。那么为什么我的代码运行良好,哪种方法是正确的?

最佳答案

您的函数只是返回您传递给它的相同指针。替换:

dist_table = sort(5, distortable);

与:

sort(5, distortable);

在这种情况下通常会更好,尽管有时返回相同的值可能很有用(例如,如果您想在更大的表达式中使用它)。

对于问题的最后部分,如果您实际上有一个 double 的二维数组,则传递 double ** 将是错误的,如下所示:

double my_array[2][5];

但这不是你所拥有的。您有一个 double * 一维(动态分配)数组,其中每个元素都指向一个 double 一维(动态分配)数组。实际的多维数组在内存中的表示方式与此不同,这就是为什么传递 double ** 不起作用。但这里实际拥有的完全不同,在这里传递一个 double ** 就可以了。

其他不相关的点...

强制转换 calloc() 的返回值是完全没有必要的,而且通常被认为是不好的形式。更好的是:

dist_table = calloc(2,sizeof(double*));
dist_table[0] = calloc(5,sizeof(double));
dist_table[1] = calloc(5,sizeof(double));

或者更好:

dist_table =  calloc(2,sizeof *dist_table);
for ( int i = 0; i < 2; ++i ) {
dist_table[i] = calloc(5,sizeof *(dist_table[i]));
}

不要忘记检查calloc()的返回值以了解分配是否成功。

关于c - 在函数中传递二维数组 - 从 C 中的函数返回二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25952615/

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