指针数组:
定义变量: 类型 *变量名[len]
含义: 存放len个地址的一维数组
1、一维数据的“另一种写法“:

1 ... 2 3 int i1=1,i2=2; 4 int *p[2]; 5 p[0]=&i1,p[1]=&i2; 6 cout<<p[0]<<" "<<p[1]<<endl; 7 cout<<p[0][0]<<" "<<p[1][0]<<endl; 8 9 ...
2、二维数组情况:

1 ... 2 3 int b[3][3]={{2,3,4},{8,8,8},{4,5,6}}; 4 int *pb[3]; 5 for(int i=0; i<3; i++) 6 pb[i] = b[i];//p[i]存放第i行的地址 7 for(int i=0; i<3; i++) 8 { 9 for(int j=0; j<3; j++) 10 cout<<pb[i][j]<<'\t'; 11 cout<<endl; 12 } 13 14 ...
注意:数组是引用类型,赋值时直指堆内存的存储空间
数组指针:
定义: 类型 (*变量名)[len]
含义: 二维数组的引用类型,笔者这样理解
1、一维情况:

1 ... 2 3 int a[3]={2,3,3}; 4 int (*p)[3];//p++,步长3*sizeof(int),相当于走过了长度为3的一行 5 p = &a; 6 for(int i=0; i<3; i++) 7 cout<<a+i<<'\t'; 8 cout<<endl; 9 for(int i=0; i<3; i++) 10 cout<<*p+i<<'\t';//p是二级地址,*p+i为一级地址 11 cout<<endl; 12 13 ...
2、二维情况:

1 ... 2 3 int a[4][2] = {2,3,3,2,3,3,2,2}; 4 int (*pa)[2];//列一致 5 pa = a;//指向二维数组时, 6 for(int i=0; i<4; i++) 7 { 8 for(int j=0; j<2; j++) 9 cout<<pa[i][j]<<'\t'; 10 cout<<endl; 11 } 12 13 ...
实例:函数传参

1 ... 2 3 void fun(int (*pa)[3]) 4 { 5 //典型的函数声明,同理fun(int pa[][2]) 6 //... 7 } 8 int main() 9 { 10 int a[2][3]={1,2,3,6,7,8}; 11 fun(a); 12 //... 13 } 14 15 ...