取消引用多级指针。
多级指针解引用(Dereferencing multi-level pointers)是指解引用一个指针,然后再次解引用指针所指向的指针,以此类推。这种情况可能会在代码中出现,但通常是设计上的缺陷。
如果你需要使用超过两次解引用(例如***
)的情况,那么你的设计很可能存在问题,你应该退后一步,重新设计问题的解决方案,然后重新实现。
有人认为这种解释是不必要的,因为只要知道*
是用来解引用指针的,再加上理解解引用的含义,以及指针可以指向其他指针,就应该能够推断出可以使用**
来解引用多级指针。但这只是某些人的观点。
我个人认为,一些新手程序员在理解指针的概念时可能会有困难,因此在学习编程时遇到多级指针并不罕见。在学习过程中,探索多级指针是可以接受的,甚至应该这样做。但在生产代码中,就需要谨慎对待了。
在上述代码中,有一个指针的多级引用的问题。这个问题的出现是因为我们想要通过指针来访问指针指向的值。
首先,我们声明了一个整型指针变量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;
?