指针数组:
定义变量: 类型 *变量名[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 ...