解引用多级指针

Dereferencing multi-level pointers

本文关键字:指针 多级 引用      更新时间:2023-10-16

这可能是其他一些问题/答案的重复(我找不到),但对我来说,似乎有很好的解释为什么和何时使用多指针,但是关于指向指针的指针如何解引用的简单解释缺失。

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

不需要这样的解释。正如您所知道的,*对指针解引用,这是一个简单的归纳,如果指向的变量也是一个指针,则只需对解引用两次就可以得到这个值。等等。

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

假设您有以下代码:

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;

-> k是多少?答:10

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

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

->现在k是多少?答:19

我希望这能帮助新程序员了解指针对指针的解引用。如果需要三重(或更多)指针,只需解引用更多级别

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

->现在k是多少?答:60

关于解引用真正含义的更多信息可以在

中找到

指针的"解引用"是什么意思?