```c // 要想得到 10,你需要先解引用 ptr_to_ptr_attempt,得到的是 ptr_to_int (它存储了 var 的地址) // 然后再解引用得到的值,这就相当于解引用了 ptr_to_int,从而得到 var 的值 10。 int actual_value = (int )ptr_to_ptr_attempt; // 这里编译器会报错,因为 ptr_to_ptr_attempt 是 int 类型,不能直接 ```
看到了吧?编译器会在这里报错。为什么?因为你告诉编译器 `ptr_to_ptr_attempt` 是一个 `int `。 当你尝试对它进行 `` 操作时,第二次解引用 `(ptr_to_ptr_attempt)` 是不合法的。编译器不知道 `ptr_to_ptr_attempt` ( которое на самом деле является адресом `var`)应该被看作什么类型来进一步解引用。它只知道 `ptr_to_ptr_attempt` 应该被看作一个 `int`。
正确的方式是使用 `int `:
```c int var = 10; int ptr_to_int = &var // 正确声明一个指向 int 的指针 int ptr_to_ptr_to_int = &ptr_to_int;
// 现在,编译器知道 ptr_to_ptr_to_int 是 int 类型。 // 第一次解引用 ptr_to_ptr_to_int 会得到一个 int (也就是 ptr_to_int) // 第二次解引用 (ptr_to_ptr_to_int) 就会按照 int 的规则去访问,得到一个 int (也就是 var 的值 10) int final_value = ptr_to_ptr_to_int;