取消引用多级指针。

21 浏览
0 Comments

取消引用多级指针。

这可能是一些其他问题/答案的重复(我找不到),但在我看来,关于为什么和何时使用多级指针有很好的解释,但缺少了一个简单的解释,即如何解引用指向指针的指针

我试图给出一个简单(并且模糊)的解释,它只能给读者提供关于如何解引用指向指针的指针的最基本知识。

0
0 Comments

多级指针解引用(Dereferencing multi-level pointers)是指解引用一个指针,然后再次解引用指针所指向的指针,以此类推。这种情况可能会在代码中出现,但通常是设计上的缺陷。

如果你需要使用超过两次解引用(例如***)的情况,那么你的设计很可能存在问题,你应该退后一步,重新设计问题的解决方案,然后重新实现。

有人认为这种解释是不必要的,因为只要知道*是用来解引用指针的,再加上理解解引用的含义,以及指针可以指向其他指针,就应该能够推断出可以使用**来解引用多级指针。但这只是某些人的观点。

我个人认为,一些新手程序员在理解指针的概念时可能会有困难,因此在学习编程时遇到多级指针并不罕见。在学习过程中,探索多级指针是可以接受的,甚至应该这样做。但在生产代码中,就需要谨慎对待了。

0
0 Comments

在上述代码中,有一个指针的多级引用的问题。这个问题的出现是因为我们想要通过指针来访问指针指向的值。

首先,我们声明了一个整型指针变量p、一个指向整型指针的指针变量p2和一个整型变量k

然后,我们初始化k并让p指向它。接下来我们让p2指向指针p

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

现在我们通过两次解引用p2来查看指针p2指向的值指向的是什么(使用简单的C++代码):

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

--> What is k? Answer: 10

我们也可以通过解引用来改变k的值

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

--> What is k now? Answer: 19

如果想要使用三级(或更多级)指针,只需要解引用更多的级别

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

--> What is k now? Answer: 60

想要了解更多关于解引用的含义,可以参考What does "dereferencing" a pointer mean?

在代码中的

p = &i;

这一行,是否应该是

p = &k;

0