首先先观察以下的一段代码:
#include<stdio.h>
void main(void)
{
int i=1;
int *p;
int **k;
p=&i;
k=&p;
printf("%u",p);
printf("%u",*p);
printf("%u",k);
printf("%u",*k);
printf("%u",**k);
getchar();
}
先思考一下输出结果是什么
1703728
1
1703724
1703728
1
是不是有点晕!
其实很简单
我们可以这么理解,每一个变量有两个值——地址和内容(个人理解,表达不够专业,勿喷)
那么上面的 p=&i 可以理解为将变量 i 的地址(1703728)赋值给 p;
就是说此时 p 的内容是 i 的地址,即1703728;而 p 本身的地址是1703724;
*p 的意思可以理解为指向 p 的内容,上面已经分析出来 p 的内容是 i 的地址,
所以 *p 可以理解为指向 i 的地址,因此打印出来的结果就是 i 的值;
同样的道理
k=&p,k 的内容为 p 的地址,即1703724;
*k 理解为指向 k 的内容,即指向 p 的地址,所以*k 打印出的值为 p 的内容,即为 i 的地址(1703728)
**k 理解为指向 *k 的内容,即指向 i 的地址,所以 **k 对应打印出来的值为 i 的值;
ps:指向 i 的地址,输出结果就是 i 的内容
i=1;
printf("%d",*&i);
输出结果为
1
觉得对你有用的话,点个赞呗~~