【发布时间】:2015-10-30 15:52:29
【问题描述】:
这可能与其他一些问题/答案(我找不到)重复,但在我看来,对于 为什么以及何时 使用多指针有很好的解释,但是没有关于指向指针的指针是如何取消引用的简单解释。
我试图做一个简单(和模糊)的解释,它应该只给读者关于如何取消引用指针到指向指针的指针的最基本知识......
【问题讨论】:
标签: c++ c pointers dereference
这可能与其他一些问题/答案(我找不到)重复,但在我看来,对于 为什么以及何时 使用多指针有很好的解释,但是没有关于指向指针的指针是如何取消引用的简单解释。
我试图做一个简单(和模糊)的解释,它应该只给读者关于如何取消引用指针到指向指针的指针的最基本知识......
【问题讨论】:
标签: c++ c pointers dereference
不应该需要这样的解释。如您所知,* 取消引用指针,这是一个简单的归纳,如果指向的变量也是一个指针,您只需取消引用 两次 即可获得 this价值。以此类推。
不要忘记一个简单的经验法则:如果您曾经需要的不仅仅是双重间接(例如发现自己在写 *** 或更糟),很可能设计有缺陷,您应该退后一步,重新设计解决问题的方法,然后再次实施。
【讨论】:
* 取消引用指针(以及 dereference 的含义)以及指针可能指向其他指针的信息,任何无法推断出他可以只写 ** 的人都不符合一个程序员。但这只是我的意见......
假设你有以下代码:
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
关于取消引用的真正含义的更多信息可以在
中找到【讨论】: