如何将指针视为多数组?

San*_*ing 6 c c++

我有这个循环,给出了seg.故障.

  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);

    }
  }
Run Code Online (Sandbox Code Playgroud)

里面的s-> c是:

double* c;
Run Code Online (Sandbox Code Playgroud)

执行时只输出:

d 27.000000
m 0
n 0
Run Code Online (Sandbox Code Playgroud)

然后是seg.故障.

当我将s-> c视为一维数组时,它有效,但我真的希望将其视为二维数组.

当c指针在结构中时,这可能吗?

如果是这样,(&s->c)[m][n]那么访问元素的正确方法是什么?

桑德拉

Rem*_*o.D 5

问题是编译器不知道矩阵的维数.

当你有:double tab[m][n]可以访问元素tab[row][col]作为*(tab + (row * n) + col)

在您的情况下,您只能将double *tab;其视为指向元素的指针,tab[0][0]而没有关于矩阵维度的信息,并且编译器无法计算正确的地址.

您可以自己计算地址(例如使用宏),但会丢失漂亮的tab[x][y]语法.

我很惊讶它编译.您应该至少收到一条关于隐式地向指针投射双精度的警告.