【问题标题】:Do reference have memory in C++? [duplicate]引用在 C++ 中有内存吗? [复制]
【发布时间】:2021-01-08 21:15:51
【问题描述】:

我是 C++ 新手,想知道引用在 C++ 中是否有内存。

#include <iostream>

int main()
{ 
    int a = 55;
    int& b = a;
    int* c = &b;
    int* d = &a;
    std::cout << (c)<<std::endl;
    std::cout << d;

}

这输出: 0077F800 0077F800

如果它指向同一个地址,那么引用只是访问同一个变量的另一种方式吗?

【问题讨论】:

  • 无法获取引用的地址。 &amp; 运算符获取引用对象的地址。也不可能直接获得参考的大小。引用上的sizeof 获取被引用对象的大小。
  • 引用只是访问变量的另一种方式,但这并不能告诉您它们是否有内存。您将引用的含义(这是一个 C++ 语言问题)与引用的实现(这是一个关于 C++ 编译器的问题)混淆了。
  • 感谢您的回答,简而言之,&b 只是返回被引用对象的地址,它在内存中没有实际空间?

标签: c++ pointers reference


【解决方案1】:
...
int a = 55;
int* c = &a;

std::cout << &a << std::endl;
std::cout << c  << std::endl;
... 

此处显示的两个打印语句将产生相同的内存地址。但是,它们的内存使用情况有所不同。

  1. std::cout &lt;&lt; &amp;a &lt;&lt; std::endl; 当我们打印&amp;a 时,没有分配内存——也就是没有存储这个内存地址。

  2. 在另一种情况下,我们在堆栈上显式分配一个内存字(在 32 位系统上为 4 字节)。然后这个内存被用来存储变量a的内存地址。

请查看following question 以了解在堆栈中分配指向变量的指针与在堆中分配指针之间的区别。

【讨论】:

  • 理解 C++ 的基础之一是了解引用和指针之间的区别。
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2013-06-14
  • 2012-04-17
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
相关资源
最近更新 更多