指针数组和数组指针
2016-04-26 20:53
260 查看
初学指针和数组这块内容,相信很多人和我一样,都是学着学着就懵逼。而频繁出现的概念如指针数组,数组指针等往往会让初学者们容易混淆,那么我们现在就对这些概念做一个浅显的讲解。由于是初学小白,不足之处欢迎大家批评指出。
指针数组vs数组指针
指针数组 ----元素为指针的数组;它的本质是一个数组,其中的元素为指针
数组指针 ----是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动)
下面借助图来加深理解:
指针数组
定义:int *p
;
“[ ]”的优先级比“*”高。所以p先与“[ ]"结合,构成一个数组的定义,数组名为p,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量,int表明其类型为整型。
例:int*p[5];
![](http://img.blog.csdn.net/20160427163911445?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
数组指针
定义: int (*p)
;
“( )”优先级比“[ ]"高,"*"和p构成一个指针的定义,指针变量名为p,int修饰整个数组中的内容。数组在这里并没有名字,是个匿名数组,它的长度是n,注意在执行p+1时,p要跨过n个整型数据的长度。
例: int(*p)[5];
![](http://img.blog.csdn.net/20160427163945979?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
举一个例子来揭示它们的区别:
如要将二维数组赋给一指针数组:
int *p[5];
int a[5][6];
for(i=0;i<5;i++)
p[i]=a[i];
这里int *p[5] 表示一个一维数组内存放着五个指针变量,分别是p[0]、p[1]、p[2]、p[3]、p[4] 所以要分别赋值。
如要将二维数组赋给一指针,应这样赋值:
int a[5][6];
int (*p)[6]; //定义一个数组指针,指向含6个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,即a[0]或&a[0][0]
p++; //该语句执行过后,此时p所指向的是下一行,即a[1][ ]
所以数组指针也称指向一维数组的指针,亦称行指针。
综上,指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间;而数组指针只是一个指针变量,它占有内存中一个指针的存储空间。
指针数组vs数组指针
指针数组 ----元素为指针的数组;它的本质是一个数组,其中的元素为指针
数组指针 ----是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动)
下面借助图来加深理解:
指针数组
定义:int *p
;
“[ ]”的优先级比“*”高。所以p先与“[ ]"结合,构成一个数组的定义,数组名为p,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量,int表明其类型为整型。
例:int*p[5];
数组指针
定义: int (*p)
;
“( )”优先级比“[ ]"高,"*"和p构成一个指针的定义,指针变量名为p,int修饰整个数组中的内容。数组在这里并没有名字,是个匿名数组,它的长度是n,注意在执行p+1时,p要跨过n个整型数据的长度。
例: int(*p)[5];
举一个例子来揭示它们的区别:
如要将二维数组赋给一指针数组:
int *p[5];
int a[5][6];
for(i=0;i<5;i++)
p[i]=a[i];
这里int *p[5] 表示一个一维数组内存放着五个指针变量,分别是p[0]、p[1]、p[2]、p[3]、p[4] 所以要分别赋值。
如要将二维数组赋给一指针,应这样赋值:
int a[5][6];
int (*p)[6]; //定义一个数组指针,指向含6个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,即a[0]或&a[0][0]
p++; //该语句执行过后,此时p所指向的是下一行,即a[1][ ]
所以数组指针也称指向一维数组的指针,亦称行指针。
综上,指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间;而数组指针只是一个指针变量,它占有内存中一个指针的存储空间。
相关文章推荐
- beego api
- 13. Roman to Integer
- bat批处理
- 数据丢失精确度的问题的解决
- 母函数
- LeeCode(Database)-Customers Who Never Order
- Android开发在ADT中关联源码
- [置顶] [汇编学习笔记][第十一章标志寄存器]
- LeetCode------Valid Anagram
- [汇编学习笔记][第十一章标志寄存器]
- LeeCode(Database)-Duplicate Emails
- hexo使用技巧
- Android 学习笔记之三 BLE
- 数组首地址与数组名取地址的区别
- 15. 3Sum
- javascript 常用代码技巧大收集
- 程序猿写的剧本?你见过了??哈哈_快来看我的原创电影剧本《烽火连三月》前二十个场景
- 数组首地址与数组名取地址的区别
- HDU5610 Baby Ming and Weight lifting 大水题
- mac环境使用sed修改文件出错的解决方法