相信接触过C语言的同学们都知道指针的运用对编写C语言有着不可或缺的作用,有了指针能使我们编写程序时事半功倍,从而节省时间,做到快捷而高效。今天课课家小编为大家介绍C语言指针的另一个常用方法--二级指针。到这里或许大家会问什么是二级指针呢?它的作用又是什么呢?别着急,下面容小编慢慢道来。
根据概念,指针可以指向一份普通类型的数据,比如int、double、char等,也可以指向一份指针类型的数据,比如int*、double*、char*等。如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
下面小编给大家举个具体的例子:假设有一个int类型的变量a,p1是指向a的指针变量,p2又是指向p1的指针变量,它们的具体关系如下图所示:
接下来小编将这种关系转换为C语言代码,具体为:
inta=100;
int*p1=&a;
int**p2=&p1;
由于指针变量也是一种变量,所以会占用存储空间和并可以使用以及获取它的地址。通常C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。p1是一级指针,指向普通类型的数据,定义时有一个*;p2是二级指针,指向一级指针p1,定义时有两个*。如果我们希望再定义一个三级指针p3,让它指向p2,那么我们可以这样编写:
int***p3=&p2;
四级指针也是类似的道理:
int****p4=&p3;
在我们的实际开发中会经常使用一级指针和二级指针,而高级指针却不常用到。另外需要我们注意的是,当想要获取指针指向的数据时,一级指针加一个*,二级指针加两个*,三级指针加三个*,往后的以此类推,下面请大家观察以下代码:
#include
intmain(){
inta=100;
int*p1=&a;
int**p2=&p1;
int***p3=&p2;
printf("%d,%d,%d,%d\\n",a,*p1,**p2,***p3);
printf("&p2=%#X,p3=%#X\\n",&p2,p3);
printf("&p1=%#X,p2=%#X,*p3=%#X\\n",&p1,p2,*p3);
printf("&a=%#X,p1=%#X,*p2=%#X,**p3=%#X\\n",&a,p1,*p2,**p3);
return0;
}
输出结果:
100,100,100,100
&p2=0X28FF3C,p3=0X28FF3C
&p1=0X28FF40,p2=0X28FF40,*p3=0X28FF40
&a=0X28FF44,p1=0X28FF44,*p2=0X28FF44,**p3=0X28FF44
以三级指针p3为例来分析上面的代码。***p3等价于*(*(*p3))。*p3得到的是p2的值,也就是p1的地址;*(*p3)得到的是p1的值,也就是a的地址;经过三次“取值”操作后,*(*(*p3))得到的才是a的值。
假设a、p1、p2、p3的地址分别是0X00A0、0X1000、0X2000、0X3000,它们之间的关系可以用下图来描述(方框里面是变量本身的值,方框下面是变量的地址):
本次初探C语言的二级指针的讲解到此暂告一段落,如果以后有什么内容继续补充或者修改的话小编会在此继续补充或者修改,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后小编希望本次的讲解对大家学习C语言能够起到一定的帮助作用!
上一篇:浅析C++内联函数
¥498.00
¥399.00
¥29.00
¥299.00