我正在维护我朋友编写的代码的一部分,这里是一个名为d
的变量的定义:
double (*d)[3];
我尝试使用下面的代码初始化变量,但在每个部分都有错误(运行时或编译)。我很困惑变量d
是指向double数组的指针还是指向double的指针数组。
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
答案 0 :(得分:4)
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]
与ContactNumbers
完全相同。