首页 > 编程语言 > 详细

指针数组和数组指针

时间:2019-11-06 11:57:45      阅读:58      评论:0      收藏:0      [点我收藏+]

 

 

指针数组:

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

 

 

指针数组和数组指针

原文:https://www.cnblogs.com/guoyujiang/p/11804212.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!