我有这个给出段的循环。错误。
s->c = malloc(width * height * sizeof(double));
if (s->c == NULL) { puts("malloc failed"); exit(1); }
for (int n = 0; n < width; n++) {
for (int m = 0; m < height; m++) {
d = (&s->c)[m][n];
printf("d %f\n", d);
printf("m %i\n", m);
printf("n %i\n", n);
}
}
在 s->c 里面是:
double* c;
执行时只输出:
d 27.000000
m 0
n 0
然后分段。错误。
当我将 s->c 视为一维数组时它起作用了,但我真的很想将其视为二维数组。
当 c 指针在结构中时,这可能吗?
如果是这样,(&s->c)[m][n]
是访问元素的正确方法吗?
桑德拉
最佳答案
问题是编译器不知道矩阵的维度。
当你有:double tab[m][n]
你可以访问元素 tab[row][col]
作为 *(tab + (行 * n) + 列)
在您的情况下,您只有 double *tab;
可以被视为指向元素 tab[0][0]
的指针,没有关于矩阵的信息维度和编译器无法计算出正确的地址。
您可以自己计算地址(例如使用宏),但会失去很好的 tab[x][y]
语法。
我很惊讶它能编译。您应该至少收到一条关于将 double 类型隐式转换为指针的警告。
关于c++ - 如何将指针视为多数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162016/