对多级指针的理解

我们通过说指针数组和二级指针之间的纠缠,进而来弄清楚多级指针的原理,很多同学没有弄清楚多级指针的原理,所以会在二级指针指向指针数组的时候感到非常的不理解。
首先,我们知道有多级指针,那么int* *p就是定义一个二级指针,那么这个二级指针是什么意思呢?意思就是指向指针的指针,这里(*p)就是一个指针变量,指针变量*p要存地址,这里的地址要有要求,这个地址要求要是一个指针的地址,即指针变量p储存的是指针的地址!这里我们来举一个例子。
char* name[]={"df","gh","hv","guef"};        
char**p;                                                
p=name+1;                                                
printf("%s",*p);                                            
这里最终的输出结果是:gh    
这里有必要解释一波,p指向指针数组的地址,指针数组中的每一个元素都是指针,所以p相当于是指向了一个指针的地址,而指针数组又被初始化了,所以说指针数组的每一个元素(每一个指针)又指向了数据的地址(这里数据的地址就是这些字符串的地址),所以在printf中,*p表示的是指针数组中的指针的地址,%s就是输出这个指针数组中的指针指向的字符串,如果是%d就是输出这个指针数组中的指针的地址。                                    
懂了么,注意定义指针的时候char*p的具体含义,是char* p,即定义的一个变量,这个变量的类型是字符型指针,我们把这个变量叫做指针变量,同理char**p的意思是char* *p,定义一个变量,这个变量的类型是字符型指针,这个变量是怎样的呢?这个变量又是一个指针,这个指针的指针变量要储存一个地址,这个地址是一个指针的地址,所以*p就是表示一个指针的地址,同理多级指针也是这个道理。
我们来一点变态一点的例子:
int a=1;
int* p1,*p2,**p3,***p4,****p5,*****p6,******p7;
p1=&a;p2=&p1;p3=&p2;p4=&p3;p5=&p4;p6=&p5;p7=&p6;
printf("%d",*p1);
printf("%d",**p2);
printf("%d",***p3);
printf("%d",****p4);
printf("%d",*****p5);
printf("%d",******p6);
printf("%d",*******p7);
最终输出来的结果都是:1
对于多级指针,总结来说就是,以二级指针为例子,定义一个指针,这个指针指向一个指针的地址,而被指向的指针指向的是一个数据的地址,所以二级指针通过指向一级指针地址指向了一个数据的地址,进而可以使二级指针也能表示出这个数据的值。说到底,多级指针就是无限套娃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值