指向双精度数组或指针数组的指针?

Pointer to array of double or array of pointers?

我正在维护我朋友写的一部分代码,这里是一个名为d的变量的定义:

double (*d)[3];

我尝试使用下面的代码初始化变量,但每个部分都有错误(运行时或编译)。我很困惑变量 d 是指向双精度数组的指针还是指向双精度数组的指针。

double k;
(*d)[0] = k; // runtime error using gcc compiler
d[0] = &k;   // Compilation error, assignment to expression with array type
*d = &k;     // Compilation error, assignment to expression with array type

d 变量是一个指向 3 长度 double 数组的指针。所以你可以给它分配一个 double[3] 数组的指针。例如:

double (*d)[3];
double a[3] = {1.0, 2.0, 3.0}
d = &a; 

不过为了更实用,还可以使用动态内存分配。例如:

double (*d)[3];
d = malloc(3 * sizeof(double));
d[0][0] = 1.0;
d[0][1] = 2.0;
d[0][2] = 3.0;
printf("%f %f %f\n", d[0][0], d[0][1], d[0][2]);

这样,d 将指向单个 3 长度的 double 数组。该程序将给出以下输出:

1.0 2.0 3.0

顺便说一下,您可以替换例如d[0][0](*d)[0]的意思完全一样