指向double或数组指针的数组?

时间:2015-10-06 07:38:50

标签: c variables definition

我正在维护我朋友编写的代码的一部分,这里是一个名为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

1 个答案:

答案 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完全相同。