我是C ++的普通程序员,通常不惜一切代价避免使用指针。但我最近开始使用一些API,只是充满了它们。而且诚实,如果我继续沿着类似的道路前进,它们似乎工作得更好,就像API的作者所预期/暗示的那样。
在形式和功能上,但显然不是语法 - 可以将“指针”视为“甚至有点”,类似于Microsoft Excel中的“单元格引用”吗?
我有几年的Microsoft Excel w / VB经验。在谈到使用Excel时,我也是一个“公式/参考瘾君子”,所以这条思路对我来说是有道理的。我只是想知道我是否“朝向正确的方向”。
谢谢!
答案 0 :(得分:9)
Excel中的单元格引用是一个字符串,它指示工作簿中的某个位置(或者,在某些情况下,指示另一个工作簿)。
C ++中的指针是内存地址。内存地址是一个数字(仅此而已!),用于定位虚拟RAM中的某个位置。
所以是的,它们实际上非常相似。我准备在你的游行中下雨,谈论这两者有多么不同。但这个比喻有效。
当你“取消引用”一个指针时,你会到达它指示的内存中的位置。在Excel中,您实际上并没有“取消引用”单元格引用。但足够接近。
当你说int y = 4; int* x = &y;
时,有点像在B1处创建一个包含“4”的单元格,然后是另一个包含“= B1”的单元格。
答案 1 :(得分:1)
我想到了几个类比,但是,当我第一次学习计算机编程时,经典的类比就是邮件室里的邮箱。想象一下标有邮箱的汤姆,迪克和哈利。
在计算机编程中,Tom,Dick和Harry都是内存地址。前两个包含指针,第三个包含一个数值。在Tom或Dick的邮箱中打开信封就像取消引用指针一样。
我们写这个:
int harry = 100;
int *dick = &harry;
int **tom = &dick;
所以,** tom == * dick == harry == 100。 汤姆是指向哈利指针的指针。 迪克是哈利的指针。
答案 2 :(得分:0)
我认为这是一个合理的比喻。
答案 3 :(得分:0)
指针只是一个内存的地址,它包含某些东西(或什么都没有)。
无论单元格是否实际包含任何数据,它的地址都可以被视为指向单元格的指针。
请注意,单元格本身不是指针。
答案 4 :(得分:-1)
不,不是真的。指针可以被编入索引,它们也可能无效,我相信Excel单元格中的任何一个都不是。