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

标签 c++ c

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

  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/

相关文章:

C++ 在 main 中调用打印 map 的函数时出现问题

c++ - 让 C++ 程序在不使用系统的情况下构建 Visual C++ 项目?

c++ - 如何通过 memcmp 比较两个图像,其中一个进行 x 轴翻转

c - 字符串不打印

c++ - 共享库 (libNNN.so) 是否/应该共享常量数据?

c++ - C/C++ : `const` position in function's argument list

c - 填充缓冲区数组中的元素 - C

康威生命游戏奇怪的结果

c - FD_ISSET 总是返回 false

c - 函数未生成正确的 openssl rsa key