取消引用多级指针

时间:2015-08-07 09:02:14

标签: c++ c pointers dereference

这可能与其他一些问题/答案(我无法找到)重复,但在我看来,为什么以及何时使用多个问题有很好的解释。指针,但缺少指向的指针取消引用的简单解释。

我试图做一个简单(和模糊)的解释,这应该只给读者最基本的知识,如何解除指向指向......指针的指针。 < / p>

2 个答案:

答案 0 :(得分:3)

不应该需要这样的解释。如你所知*取消引用指针,这是一个简单的归纳,如果指向的变量也是指针,你可以只取消引用两次来获得这个价值。等等。

不要忘记一个简单的经验法则:如果需要超过双重间接(例如发现自己写***或更糟),很可能您的设计存在缺陷,您应该退后一步,重新设计问题的解决方案,然后重新实施。

答案 1 :(得分:0)

假设您有以下代码:

int *p;
int **p2;
int k;

然后我们可以初始化k并让p指向它。之后我们可以让p2 指向指针 p

k = 10;
p = &i;
p2 = &p;

我们现在将取消引用p2两次,以查看指向的指针p2指向的值(使用简单的C ++):

#include <iostream>
...
std::cout << "What is k? Answer: " << **p2;

- &GT;什么是k?答案:10

也可以通过解除引用来更改k的值

**p2 = 19;
std::cout << "What is k now? Answer: " << **p2;

- &GT;现在k是什么?答案:19

我希望这可以帮助新程序员了解指针的指针是如何解除引用的。如果需要三个(或更多)指针,只需取消引用更多级别

int ***p3 = &p2;
***p3 = 60;
std::cout << "What is k now? Answer: " << ***p3;

- &GT;现在k是什么?答案:60

有关解除引用真正含义的更多信息,请参阅

What does "dereferencing" a pointer mean?