利用指针遍历二维数组
#include <iostream>
using namespace std;
int main() {
// 一、二维数组三种地址类型
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
// 1.第一种,元素类型的地址,元数是int类型,那么每个元素地址是int*
int *p = &a[0][0]; //首元素的地址
// 可以通过偏移器输出二维数组所有元素,也从侧面验证了二维数组也是连续存储的
for(int i=0;i<9;i++){
// cout<<*(p+i)<<" "; //对偏移i个元素
cout<<p[i]<<" "; //地址+偏移量[i],与上面一样
}
cout<<endl;
/*
输出:
1 2 3 4 5 6 7 8 9
*/
// 2.第二种,数组的本质a是首元素a[0]的地址 a==&a[0],这是一个一维数组类型的地址 a[0]是一个有3个元素的一维数组
int (*p2)[3] = a; // *p2==a
// p2 = &a[0] //与上面等价 *p2==a[0]
// 所以 a == a[0] == *p2 三个等价
cout<<a<<endl;
cout<<a[0]<<endl;
cout<<*p2<<endl;
// 地址+偏移量
// a[0]
cout<<a[0]<<endl;
cout<<*p2<<endl; // *p2==a[0] *(p2+1) == a[1] p2[1] == a[1]
cout<<a[0][0]<<endl;
cout<<(*p2)[0]<<endl;
cout<<(*(p2+0))[0]<<endl;
cout<<p2[0][0]<<endl;
cout<<endl;
/*
输出:
0x7ff7bfeff2b0
0x7ff7bfeff2b0
1
1
1
1
*/
// 3.第三种,二维数组类型地址
int (*p3)[3][3] = &a;
return 0;
}