指针数组和数组指针

指针数组:

定义变量:  类型  *变量名[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]<<'	';
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<<'	';
 8     cout<<endl;
 9 for(int i=0; i<3; i++)
10     cout<<*p+i<<'	';//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]<<'	';
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
原文地址:https://www.cnblogs.com/guoyujiang/p/11804212.html