【问题标题】:how to access the N-d array element using pointers如何使用指针访问 N 维数组元素
【发布时间】:2015-10-18 12:12:33
【问题描述】:

假设我们有一个二维数组a[n][m]。我可以使用*(*a + i * n + j) 而不是a[i][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;
}

【问题讨论】:

  • 你能把你的代码贴在这里吗?
  • 不会*(*a + i * n + j) 导致i &gt; 0 的未定义行为?

标签: c++ pointers multidimensional-array


【解决方案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)) 相同(根据定义)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2021-10-08
    • 2013-06-29
    • 2012-11-13
    相关资源
    最近更新 更多