c++ - 通过指针访问 C 中 4d 数组中的元素

标签 c++ c arrays

我在声明指向我的 4d 数组的指针时遇到问题。

我是这样声明的:

int matrix[7][4][5][5] =
{
  {/* Section 1 */
    {
      /* 1st */
      {0,0,1,0,0},
      {0,0,1,0,0},
      {0,0,1,0,0},
      {0,0,0,0,0},
      {0,0,0,1,0}
    },
    {
     /* 2nd */
      {0,0,0,0,0},
      {0,0,0,0,0},
      {1,0,0,1,1},
      {0,0,0,0,0},
      {0,0,0,0,0}
    },
    . . . 
  }/* End Section 1 */
}

我希望能够在注释 /* 2nd */ 下打印出二维数组中的元素。

我有一些代码可以像这样遍历二维数组:

for(int i = 0; i < 5; i++)
  {
    for(int j=0; j<5; j++)
    {
      std::cout << " " << pMatrixPtr[i][j];
    }
    std::cout << "\n";
  }

但我的问题是 - 我不知道将 pMatrixPtr 设置为什么,或者它应该是什么类型(我的意思是指针的级别......应该是 ** 吗?)。我尝试的任何东西似乎都无法编译,我认为这是因为我不完全理解所涉及的类型。

谁能解释如何通过指针访问 4d 数组,以及该指针应指向什么?

最佳答案

int (*pMatrixPointer)[5] = matrix[0][1];

将设置pMatrixPointer 指向matrix 中的第二个二维数组。然后,您将在上面的代码中使用它:

for(int i = 0; i < 5; i++)
{
  for(int j=0; j<5; j++)
  {
    std::cout << " " << pMatrixPtr[i][j];
  }
  std::cout << "\n";
}

为什么会这样:

在大多数情况下,数组类型的表达式将被转换为指针类型的表达式,表达式的值将是数组中第一个元素的地址(C 和 C++ 都是如此)。

表达式 matrix[0][1] 的类型为“int 的 5 元素数组的 5 元素数组”;根据上面的规则,表达式被转换为类型“指向 int 的 5 元素数组的指针”(int (*)[5]) 并且值为 >&矩阵[0][1]

表达式a[i]等价于*(a + i);下标操作中存在隐式取消引用。所以 pMatrix[i] 等同于 *(pMatrix + i),它产生一个指针值,我们进一步用 j 偏移,如 *(*(pMatriux + i) + j)

关于c++ - 通过指针访问 C 中 4d 数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12639083/

相关文章:

c++ - 需要省略号和 va_args 技巧

c++ - 将音乐作为 SDL_Mixer block 运行

c++ - 修复由于 OpenSSL 中的 SIGILL 而导致的崩溃

用 .h 编译 .so

c - 带尾随空格的固定长度填充

java - 出现 ArrayIndexOutOfBoundsException : 97 的运行时错误

ios - 对 NSMutableArray 进行排序

c++ - Arduino C++,奇怪的数组行为

c++ - 递归函数计算数字中的位数

c++ - 包含 "flint.h"或 "flint/flint.h"是更好的做法