gpt4 book ai didi

c - 将指针传递给函数指针

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

void foo(double **A, double **B) {
//....
}

int main() {
double **A;
double B[10][10];
int i, j;

A = (double **)malloc(sizeof(double*) * 10);

for (i = 0; i < 10; i++) {
*(A+i) = (double*)malloc(sizeof(double) * 10);
for (j = 0; j < 10; j++) {
*(*(A+i)+j) = i * j;
}
}

foo(A, B);

return 0;
}

这给了我一个警告

warning: incompatible pointer types passing 'double [10][10]' to parameter of type 'double **'
[-Wincompatible-pointer-types]

根据我的理解,B 持有一个指向 double 类型指针的指针。我不是在对 A 和 B 做同样的事情吗?为什么我只收到 B 的警告?

最佳答案

B 是一个由 10 个 double 数组组成的数组,与指向 double 数组的指针数组的类型截然不同。将 foo 的原型(prototype)更改为:

void foo(double **A, double (*B)[10])

还可以这样简化 main 中的代码:

int main() {
double **A;
double B[10][10];
int i, j;

A = malloc(10 * sizeof(*A));
for (i = 0; i < 10; i++) {
A[i] = malloc(10 * sizeof(*A[i]));
for (j = 0; j < 10; j++) {
A[i][j] = i * j;
}
}
foo(A, B);
return 0;
}

关于c - 将指针传递给函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34803447/

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