我发现通过现实世界的比较隐喻我学得最好。例如,在java中,帮助我理解Accessors和Mutators概念的一种方法是通过中间人的概念来思考它(私有变量不喜欢直接处理他们的客户,他们更喜欢有中间人(访问者和变异者)处理它们)
C中指针的概念对我来说仍然有点棘手。用一个很好的比喻来描述它们是如何工作的?
答案 0 :(得分:9)
我总是喜欢指针就像你的手指一样。如果我带你去停车场并要求你找我一辆红色汽车,你伸出一根手指(你选择的那个;))并指向一辆红色汽车。
你的手指不是答案。你的手指什么也没告诉我,但如果我看到你手指指向的地方,我就能找到我想要的东西。
现在我可以要求您找到一辆蓝色汽车,然后您可以将手指(重新分配)重定向到新车。现在你的指针(和以前一样)向我展示了相同类型的新数据。指针没有改变,只是指向它。
这也适用于多个指针。我可以问指针指向蓝色汽车的哪个位置,你可以用另一只手,用手指指向第一根手指。现在,如果我想知道蓝色汽车的位置,我可以按照第一根手指的方向指向第二根手指,然后是汽车(数据)。
答案 1 :(得分:1)
你可以想到就像现实世界的地址一样,他们只是告诉你在内存中找到什么东西,递增一个指针(我在这里引用pointer arithmetic)就像搬到隔壁的房子一样,看看这个answer到另一个问题。
答案 2 :(得分:0)
您可以将它们视为电话号码,告诉您如何与某人联系。
拨打电话号码就像取消引用指针一样。
手机可能已断开连接。也许已经很久了,现在别人有电话号码了。这就像一个悬垂的指针。
答案 3 :(得分:0)
不需要隐喻。指针是保存内存地址的变量。周期。
答案 4 :(得分:0)
假设有一个电子表格的场景,您可以在这里和那里散布数据,但是当您可以使用行号和列号调用特定数据时,您可以获得正确的数据。
行和列是指针。
现在,您可以将这些行号和列号存储到另一个电子表格中,供您参考。此电子表格现在还有行号和列号来确定数据,这是对原始电子表格的实际数据的引用。