嗨我刚刚开始关注指针和数组,我或多或少知道如何操作一维数组中的指针来显示元素。但是在多维数组中呢? 我一直在练习这段代码:
#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]和后续元素显示地址和值指针?
答案 0 :(得分:1)
(ptr)[1]
(与ptr[1]
相同)并未指向a[0][1]
,它指向a[1][0]
,因为您将ptr
定义为int[3]
的指针1}},而不是int
。因此,ptr
按1
递增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;
}
希望这可以解除你的怀疑。