指向双精度数组或指针数组的指针?
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]
的意思完全一样
我正在维护我朋友写的一部分代码,这里是一个名为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]
的意思完全一样