C指针
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num=16;
int *a,**b;
a=#
b=&a;
printf("&num:%p\n",&num);
printf("num:%p\n",num);
printf("&a:%p\n",&a);
printf("a:%p\n",a);
printf("*a:%p\n",*a);
printf("&*a:%p\n",&*a);
printf("&b:%p\n",&b);
printf("b:%p\n",b);
printf("*b:%p\n",*b);
printf("&*b:%p\n",&*b);
printf("**b:%p\n",**b);
printf("&**b:%p\n",&**b);
return 0;
}
结果
分析
计算机为变量开辟内存是按照创建变量顺序的逆顺序分配的。
num是int变量名,num=是给变量赋值,&num是取int变量num的地址。
&a读取int指针变量a的地址,a=&num,指针变量a存储num的地址,即给a赋值,*a是通过指针变量a存储的地址,还原所存储地址上的赋值。
二级指针无非就是在一级指针的功能上再往上实现一次还原赋值,b=&a,b存储了a的地址,即b被赋值,*b就是还原b被赋值的地址上所存储的赋值,那么之前a地址上进行了a=&num,所以a地址上的赋值的num的地址,*b也就是num的地址了,**b是二级指针,可以看作是*(*b)还原*b所存地址上的赋值,那么也就是num的变量值了。
我是大一的小白,希望大家指点我不正确的思想,十分感谢!