我们通过说指针数组和二级指针之间的纠缠,进而来弄清楚多级指针的原理,很多同学没有弄清楚多级指针的原理,所以会在二级指针指向指针数组的时候感到非常的不理解。
首先,我们知道有多级指针,那么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
对于多级指针,总结来说就是,以二级指针为例子,定义一个指针,这个指针指向一个指针的地址,而被指向的指针指向的是一个数据的地址,所以二级指针通过指向一级指针地址指向了一个数据的地址,进而可以使二级指针也能表示出这个数据的值。说到底,多级指针就是无限套娃。
对多级指针的理解
最新推荐文章于 2024-07-26 23:51:02 发布
258

被折叠的 条评论
为什么被折叠?



