我在声明指向我的 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/