如何用指针格式表示多维数组?

时间:2017-07-28 15:34:12

标签: c++ arrays

对于一维数组,我访问数组元素没有问题。例如 -

#include<typeinfo>
#include<iostream>
#include<vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
int main()
{
        int a[3] = {1, 2, 3};
        cout << *(a + 0);
        return 0;
}

但是当我尝试二维数组时,我得到了那种输出 -

#include<typeinfo>
#include<iostream>
#include<vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
int main()
{
        int a[][3] = {1, 2, 3};
        cout << *(a + 2);
        return 0;
}

输出 -

0x7ffca0f7ebcc

如何以第一个例子中描述的格式获得输出为2(我将按行主要或列主要顺序得到2,但c ++遵循行主要数组表示)?

2 个答案:

答案 0 :(得分:1)

这将为您提供第一行的第三个元素。

#include <iostream>    
int main()
{
    int a[][3] = {1, 2, 3};
    std::cout << *(*a + 2);
}

虽然您可能会发现a[0][2]更容易理解。

答案 1 :(得分:0)

对于原始数组,C ++从C继承了

的规则
a[i]

转换为

*(a + i);

要访问二维数组,我们可以应用此规则两次:

a[i][j] => *(a[i] + j) => *(*(a + i) + j)

虽然a[i][j]语法显然更容易理解。