内存地址
回答
因为它们都指向相同的内存位置。这基本上是通过引用是关于。不是传递(复制)变量的实际值,而是因为性能(和内存使用)原因而发送它的地址。
引用行为有点像指针,但它们更安全,不同于指针。欲了解更多信息,请看this page。
与你一起,但我的老师说,假设x作为变量a的别名,那么x必须有一些内存地址,如01010,也可以有0101,所以两者如何可以相同 – gurwinder 2010-08-16 15:39:27
在内部,引用实现为指针 - 所以是的,参考文献在别的地方。但在语言规则中,x **是** a。我认为获取引用的地址在引擎盖下相当于获取指针的值(即指针存储/指向的地址)。 – delnan 2010-08-16 15:48:23
@gurwinder:你的老师不知道他们在说什么。告诉他他正在承担一个实现细节,而C++是一种语言,而不是实现。所有这些都是标准所要求的,你不能保证参考*甚至有存储*。 (参见§8.3.2/ 3:“没有指定参考是否需要存储”)所以,通过说“它必须存储在某个地方”,你的老师是无可辩驳的错误;它可能不会。 @delnan:它可能也可能不是,标准不需要任何东西。 – GManNickG 2010-08-16 19:13:29
因为它是参考。这意味着它引用实际变量。
int i = ...;
int& ri = i;
在这个例子中,是ri
像i
的别名。
引用是另一个变量的别名 - 它只是分配给引用的另一个名称。
编译器可能会使用指针机制实现它在幕后,但如果有足够的人知道的事情是混淆和参考的寿命,编译器可以与
这也是一个重要的预留分配知道:
$ 8.3.2/3 - “没有指定参考是否需要存储(3.7)”。
我不明白这个说法吗?这是什么意思 ? – 2010-08-20 09:20:10
@StephaneRolland例如,它意味着如果编译器发现被引用变量的整个生命期都在寄存器中,它永远不会在被寻址的内存中。 – 2014-02-12 21:41:20
- 1. C++内存地址?
- 2. 机器内存地址的内存地址? (C语言)
- 3. 变量的内存地址
- 4. LAMBDA返回内存地址
- 5. C内存地址问题
- 6. VA和内存地址
- 7. 保留的内存地址?
- 8. 内存地址对齐
- 9. 指针内存地址
- 10. 了解内存地址
- 11. 转换内存地址
- 12. 从内存地址代码
- 13. 随机内存地址
- 14. 位的内存地址
- 15. 为什么GDB中的一些内存地址比其他内存地址短?
- 16. 自动将虚拟地址转换为内存地址?
- 17. 放置 - 新地址vs原始内存地址
- 18. 内存与物理地址或虚拟地址合并?
- 19. memccpy返回内存地址低于src的起始地址
- 20. 内存地址:Linker VS.加载程序
- 21. c中的访问内存地址#
- 22. CUDA:全局内存访问地址
- 23. 程序集中的内存地址
- 24. 调用函数在内存地址x86_x64
- 25. 阵列的内存地址 - Java
- 26. 指定标签的内存地址
- 27. 更改内存地址的速度
- 28. 内存地址C的整数句柄#
- 29. '挂钩'与C + +的内存地址?
- 30. 叉 - 相同的内存地址?
如果你不把它称为“参考变量”,它可能不那么令人困惑。引用不是一个变量,并且没有自己的地址。 – 2010-08-16 15:34:53
@Mike:命名的引用将被称为*变量*在C++ 0x中讨论[这里](http://stackoverflow.com/questions/2908834/why-was-the-definition-of-a-variable -changed-在最最新-C0X-草案)。 – fredoverflow 2010-08-16 15:52:35