《指针的编程艺术(第二版)》一2.2 两颗星星:表示两把钥匙

本节书摘来自异步社区《指针的编程艺术(第二版)》一书中的第2章,第2.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;
}

输出结果


《指针的编程艺术(第二版)》一2.2 两颗星星:表示两把钥匙

其中

int *p1 = &x;

表示p1指针变量所存储的是x变量的地址,而

 `javascript
int **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元。
上一篇:Javascript与Objective-C 字符串与数组的方法类比


下一篇:WinForm简单多国语言实现