指针数组:

定义变量:  类型  *变量名[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 ...
View Code

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 ...
View Code

注意:数组是引用类型,赋值时直指堆内存的存储空间

数组指针:

定义:  类型 (*变量名)[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 ...
View Code

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 ...
View Code

实例:函数传参

 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 ...
View Code
12-31 04:46
查看更多