1.首先咱先看一级指针的用法,下面用程序进行展示:
#include<stdio.h>
int main()
{
int datas=10;
int *p=&datas; //p=&datas
printf("datas 的地址是:%p\n",&datas); //输出datas的地址
printf("p保存的data的地址是:%p,内容是%d\n",p,*p);
return 0;
}
运行结果:
datas 的地址是:000000000061FE14
p保存的data的地址是:000000000061FE14,内容是10
一级指针的用法其实是取数据(实数)的地址,那进行类比,二级指针就是取一级指针的地址,也可以表示一级指针的所指向的内容。
下面就用程序进行证明:
#include<stdio.h>
int main()
{
int datas=10;
int *p=&datas; //p=&datas
printf("datas 的地址是:%p\n",&datas); //输出datas的地址
printf("p保存的data的地址是:%p,内容是%d\n",p,*p);
//二级指针
int **p1;
p1=&p; //访问一级指针
printf("p的地址:%p\n",&p);
printf("p1保存的地址:%p\n",p1);
printf("*p1所指向:%p\n",*p1);
printf("**p1的内容:%d\n",**p1);
return 0;
}
运行结果:
datas 的地址是:000000000061FE14
p保存的data的地址是:000000000061FE14,内容是10
p的地址:000000000061FE08
p1保存的地址:000000000061FE08
*p1所指向:000000000061FE14
**p1的内容:10
对于刚开始看,确实有点不太好理解,自己一定要敲代码体会一下。
那对于三级指针自己是不是有点懂了,类比二级指针与一级指针就可以。那接下来继续用实例证明:
#include<stdio.h>
int main()
{
//一级指针
int datas=10;
int *p=&datas; //p=&datas
printf("datas 的地址是:%p\n",&datas); //输出datas的地址
printf("p保存的data的地址是:%p,内容是%d\n",p,*p);
puts("\n");
//二级指针
int **p1;
p1=&p; //访问一级指针
printf("p的地址:%p\n",&p);
printf("p1保存的地址:%p\n",p1);
printf("*p1所指向:%p\n",*p1);
printf("**p1的内容:%d\n",**p1);
printf("\n");
//三级指针
int ***p2;
p2=&p1; //访问二级指针
printf("p1的地址:%p\n",&p1);
printf("p2保存的地址:%p\n",p2);
printf("*p2所指向:%p\n",*p2);
printf("**p2所指向:%p\n",**p2);
printf("***p2所指向的内容:%d\n",***p2);
return 0;
}
运行结果:
datas 的地址是:000000000061FE14
p保存的data的地址是:000000000061FE14,内容是10
p的地址:000000000061FE08
p1保存的地址:000000000061FE08
*p1所指向:000000000061FE14
**p1的内容:10
p1的地址:000000000061FE00
p2保存的地址:000000000061FE00
*p2所指向:000000000061FE08
**p2所指向:000000000061FE14
***p2所指向的内容:10
这就所谓的三级指针,大家可进行实操,多多理解。