使用指针显示多维数组中的元素

时间:2015-02-10 17:21:05

标签: c++ pointers multidimensional-array

嗨我刚刚开始关注指针和数组,我或多或少知道如何操作一维数组中的指针来显示元素。但是在多维数组中呢? 我一直在练习这段代码:

#include<iostream>
using namespace std;
int main()
{

    int a[2][3]= { {1,2,3},{4,5,6}};
    int (*ptr)[3] = &a[0]; // or (*ptr)[3] = a;

    cout <<"Adress 0,0: "<< a << endl;
    cout <<"Adress 0,0: "<< ptr << endl;         
    cout <<"Value 0,0: "<< *a[0] << endl;
    cout <<"Value 0,0: "<< *(ptr)[0]<< endl;
    cout <<"Adress 0,1: "<< &a[0][1] << endl;
    cout <<"Adress 0,1: "<< (ptr)[1] << endl;       

    return 0;
}

我设法使用数组名称和指针显示[0] [0]的地址和值,但是如何使用[0] [1]和后续元素显示地址和值指针?

2 个答案:

答案 0 :(得分:1)

(ptr)[1](与ptr[1]相同)并未指向a[0][1],它指向a[1][0],因为您将ptr定义为int[3]的指针1}},而不是int。因此,ptr1递增ptr[1]会跳过三个int,最多a[1][0]

要将ptr增加一个int而不是三个int的尺寸:

ptr[0] + 1

以上将指向a[0][1]。并访问:

*(ptr[0] + 1)

答案 1 :(得分:1)

    #include<iostream>
    using namespace std;

    int main()

{

    int a[2][3]= { {1,2,3},{4,5,6}  };
    int (*ptr)[3] = &a[0]; // or (*ptr)[3] = a;

    cout <<"Adress 0,0: "<< a << endl;
    cout <<"Adress 0,0: "<< ptr << endl;         
    cout <<"Value 0,0: "<< *a[0] << endl;
    cout <<"Value 0,0: "<< *((ptr)[0]+0)<< endl;
    cout <<"Adress 0,1: "<< &a[0][1] << endl;
    cout <<"Adress 0,1: "<< (ptr)[0]+1 << endl;       
    cout <<"value 0,1: "<<  a[0][1] << endl;
    cout <<"value 0,1: "<< *((ptr)[0]+1) << endl;

    cout <<"Adress 1,0: "<< &a[1][0] << endl;
    cout <<"Adress 1,0: "<< (ptr)[1] << endl;       
    cout <<"value 1,0: "<<  a[1][0] << endl;
    cout <<"value 1,0: "<< *((ptr)[1]+0) << endl;       

    return 0;
}

希望这可以解除你的怀疑。