网上看到过这样一个资讯,有个非常难得数学问题,大佬们想用编程实现,始终不得其解,后来被一个俄罗斯团队解决掉了。后来一层一层剖析代码,发现战斗民族用了5层指针!!!属实牛掰!!!
那么多级指针又是什么呢?我们先从二级指针来看:
#include <stdio.h>
int main(){
int data = 10;
int *p;
p=&data;
printf("data的地址是:%p\n",&data);
printf("指针p保存data的地址是:%p,它指向的内容是:%d\n",p,*p);
printf("指针p也有自己的地址:%p",&p);
int *pp=&p;//把指针p的地址保存到另一个指针pp中
printf("指针pp保存的是p的地址:%p\n",pp);
printf("那么指针pp也有自己的地址:%p\n",&pp);
printf("指针pp保存的是p的地址,那么*pp取得是p的内容,而p的内容是data的地址:\n");
printf("*pp是%p\n",*pp);
puts("====================");
printf("因为int *pp=&p这样去定义是会报错的,所以不能这样编写程序!!!\n");
int **p2;
p2=&p;//p2是个二级指针,它指向的是一级指针的地址。
printf("二级指针p2保存的是p的地址:%p\n",p2);
printf("那么二级指针p2也有自己的地址:%p\n",&p2);
printf("指针都是一级一级关联的\n");
printf("所以,**p可以访问data的值:%d\n",**p2);
puts("====================\n");
printf("同理应该也有三级甚至多级指针\n");
int ***p3;
p3=&p2;
printf("p3是指向二级指针的三级指针~~~\n");
printf("三级指针p3保存的是p2的地址:%p\n",p3);
printf("那么三级指针p3也有自己的地址:%p\n",&p3);
printf("所以,***p可以访问data的值:%d\n",***p3);
return 0;
}
多级指针其实就是套娃,只要搞清楚二娃存大娃的地址,三娃存二娃的地址,第n个娃存第(n-1)娃的地址,这个概念,还是比较好理解多级指针的。