&: 取址符
*加变量名:可以理解为取值符,因为指针变量里面存的是一个指针,所以要取地址所存储的值;
例:
int a = 10;
int *b = &a;
int **c = &b;
printf(" a == %d a的值 \n ",a);
printf("&a == %d a的地址\n", &a);
printf(" b == %d b变量的值存储的a的地址\n",b);
printf("&b == %d b变量的地址\n ", &b);
printf("*b == %d 存储的地址所指向的值也就是a的值\n", *b);
printf(" c == %d c变量的值存储的b的地址\n",c);
printf("&c == %d c变量的地址\n",&c);
printf("*c === %d 因为c存储的是b的地址,然后通过b的地址找到它所存储的值,也就是a的地址",*c);
printf("**c == %d 因为*c的值是a地址,所以**c就是a地址所指向的值 也就是a的值\n",**c);
打印结果:
a == 10 -------- a的值
&a == -361778052 -------- a的地址
b == -361778052 -------- b变量的值存储的a的地址
&b == -361778064 -------- b变量的地址
*b == 10 -------- 存储的地址所指向的值也就是a的值
c == -361778064 -------- c变量的值存储的b的地址
&c == -361778072 -------- c变量的地址
c === -361778052 -------- 因为c存储的是b的地址,然后通过b的地址找到它所存储的值,也就是a的地址
c == 10 -------- 因为c的值是a地址,所以c就是a地址所指向的值 也就是a的值
记住三个点:
- 定义一个指针,赋值的时候需
要的是一个指针地址
; - 每个变量本身都有会有一个地址;
- 通过*加变量名就是获取
存储的地址所指向的值
,通常说的是解引用;
三级指针在赋值时候就需要二级指针的变量地址了,以此类推,无限套娃;多看几遍就会理解了;
网友评论