如何使用指针访问N-d数组元素

时间:2015-10-18 12:12:33

标签: c++ pointers multidimensional-array

假设我们有一个二维数组a[n][m]。而不是a[i][j]我可以使用*(*a + i * n + j)

如何使用指针访问N维数组的元素?即我可以使用什么而不是a[i][j]...[k]

例如,我尝试执行以下操作,但这不起作用:

#include<iostream>
#include<conio.h> 
using namespace std;
int main() {
    const int n1 = 5, n2 = 5, n3 = 5;
    int array[n1][n2][n3];
    for (int i = 0; i < n1; i++)
    for (int j = 0; j < n2; j++)
    for (int k = 0; k < n3; k++)
        array[i][j][k] = n1*n2*n3;

    cout << array[1][2][4]<<endl;
    cout << *(*array + n1 + n2 * 2 + 4);

    _getch();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

引自N1256 6.5.2.1数组下标

  

下标运算符[]的定义   是 E1[E2] (*((E1)+(E2))) 相同。

据此,我可以说以下所有内容都是等同的:

a[i][j][k]
(*(a + i))[j][k]
(*((*(a + i)) + j))[k]
(*((*((*(a + i)) + j)) + k))

注意:添加的代码是C ++,而不是C.对于C ++,N3337 5.2.1订阅说明:

  

表达式E1[E2]*((E1)+(E2))

相同(根据定义)