用什么来描述C中的指针会有什么好的真实世界比喻?

What would be a good real world metaphor to use to describe pointers in C?

本问题已经有最佳答案,请猛点这里访问。

我发现我通过现实世界中的比较隐喻学习得最好。例如,在Java中,帮助我理解访问器和调制器的概念的一种方法是通过中间人的概念来思考它(私有变量不喜欢直接处理他们的客户,他们更喜欢有中间人(访问者和突变者)处理它们)。

C语言中指针的概念对我来说仍然有点棘手。用什么来描述它们是如何工作的呢?


我一直喜欢这样一个比喻:指针就像你的手指。如果我带你去停车场,让你给我找一辆红色的车,你伸出一根手指(由你选择),指着一辆红色的车。

你的手指不是答案。你的手指什么也没告诉我,但如果我看看你的手指指向哪里,我就能找到我要找的东西。

现在我可以让你找到一辆蓝色的车,你可以把你的手指重新定位到一辆新车上。现在,您的指针(与以前相同)正在向我显示相同类型的新数据。指针没有改变,只是指向了什么。

这也适用于多个指针。我可以问指针指向蓝色汽车的位置,你可以用另一只手,用手指指向第一个手指。现在,如果我想知道蓝色汽车在哪里,我可以沿着第一个手指的方向,到第二个手指,到汽车(数据)。


你可以想象,就像现实世界中的地址一样,它们只告诉你在哪里可以找到记忆中的东西,增加一个指针(我这里指的是指针算术),就像搬到隔壁的房子里,看看这个问题的答案。


假设一个电子表格的场景,数据分散在这里和那里,但是当您可以使用行和列号调用特定的数据时,您得到了正确的数据。

行和列是指针。

现在,您可以将这些行和列编号存储到另一个电子表格中,以供参考。这个电子表格现在也有行和列的编号来确定数据,这是对原始电子表格的实际数据的引用。


不需要隐喻。指针是保存内存地址的变量。时期。


你可以把它们想象成电话号码,它告诉你如何联系某人。

调用电话号码就像取消对指针的引用。

电话可能断开。也许已经很久了,现在有人有了电话号码。就像一个悬空的指针。