gpt4 book ai didi

c++ - 如何将指针视为多数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:16 26 4
gpt4 key购买 nike

我有这个给出段的循环。错误。

  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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com