【问题标题】:Memory address of reference variable [duplicate]引用变量的内存地址[重复]
【发布时间】:2010-08-16 15:08:09
【问题描述】:

可能重复:
Is there any way to find the address of a reference?

当我们打印实际变量和引用变量的地址时,为什么会显示相同的地址?

【问题讨论】:

  • 如果您不将其称为“参考变量”,它可能不会那么令人困惑。引用不是变量,也没有自己的地址。
  • @Mike:命名引用将在 C++0x 中称为 variables,正如 here 所讨论的那样。

标签: c++


【解决方案1】:

引用是另一个变量的别名 - 它只是分配给引用的事物的另一个名称。

编译器可能会在幕后使用指针机制来实现它,但如果对被别名的事物和引用的生命周期有足够的了解,编译器就可以省去这一点

【讨论】:

    【解决方案2】:

    因为它们都指向同一个内存位置。这基本上就是通过引用传递的全部内容。不是传递(复制)变量的实际值,而是出于性能(和内存使用)的原因发送它的地址。

    引用的行为有点像指针,但它们更安全,并且在一些方面与指针不同。欲了解更多信息,请查看this page

    【讨论】:

    • 对你很生气,但我的老师说假设 x 作为变量 a 的别名,那么 x 必须有一些内存地址,如 01010 并且 a 可以有 0101,那么两者怎么可能相同
    • 在内部,引用被实现为指针 - 所以是的,引用位于其他地方。但在语言规则范围内,x a。我想获取引用的地址实际上等同于获取指针的值(即指针存储/指向的地址)。
    • @gurwinder:你的老师不知道他们在说什么。告诉他他假设了一个实现细节,而 C++ 是一种语言,而不是一种实现。所需要的只是标准所说的,不能保证参考甚至有存储空间。 (参见第 8.3.2/3 节:“未指定引用是否需要存储”。)所以说“它必须在某处存储”,你的老师无疑是错误的;它可能不会。 @delnan:可能是也可能不是,标准不需要任何东西。
    【解决方案3】:

    这也是一个重要的知识:

    $8.3.2/3 - “未指定引用是否需要存储 (3.7)。”。

    【讨论】:

    • 我不明白这句话?这是什么意思?
    • @StephaneRolland 这意味着,例如,如果编译器发现被引用变量的整个生命周期都在寄存器中,那么它将永远不会在寻址内存中。
    【解决方案4】:

    因为它是一个参考。这意味着它引用了实际变量。

    int i = ...;
    int& ri = i;
    

    在本例中,ri 类似于 i 的别名。

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2023-03-03
      • 2014-07-25
      相关资源
      最近更新 更多