本节书摘来自异步社区《指针的编程艺术(第二版)》一书中的第2章,第2.2节,作者 蔡明志,更多章节内容可以访问云栖社区“异步社区”公众号查看
指针的编程艺术(第二版)接下来,讨论两个*的用法,这好比需要两把钥匙才能得到信箱内的信件,如范例twoPointer所示。
范例twoPointer
/* twoPointer.c */ #include <stdio.h> #include <conio.h> int main() { int x = 100; int *p1 = &x; int **p2 = &p1; printf("变量定义如下: \n"); printf("int x = 100;\nint *p1 = &x;\nint **p2 = &p1;\n\n"); printf("&x=%p\n", &x); printf("&p1=%p, p1=%p\n", &p1, p1); printf("&p2=%p, p2=%p\n\n", &p2, p2); printf("**p2=%d, *p1=%d\n", **p2, *p1); getch(); return 0; }输出结果
其中
int *p1 = &x;表示p1指针变量所存储的是x变量的地址,而
`javascriptint **p2 = &p1;
这条语句的示意图,如下所示。 <div style="text-align: center"> <img src="https://yqfile.alicdn.com/920b874c44a2761fc10071e73073a2de524cd385.png" > </div> 表示p2指针变量需要通过两次的间接访问才能得到x的值,也就是p2需具备两把钥匙才能得到信箱内的信件。因为*p2表示第一次间接得到p1变量的数据,它里面存储的是x变量的地址,此时再加上一个*,就可得到x变量的值。 这个例子好比一个人使用第一把钥匙打开信箱p1,得到的信件的内容是另一个信箱x的地址;他再拿起第二把钥匙,打开信箱x,发现里面是100元。 相关资源:敏捷开发V1.0.pptx