首先先观察以下的一段代码:
#includevoid 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
觉得对你有用的话,点个赞呗~~



