【问题标题】:C++ Why do reference values change previous values?C++ 为什么引用值会改变以前的值?
【发布时间】:2020-07-21 03:07:21
【问题描述】:

有人可以帮我解决这个问题吗?我认为输出将是 20 10 20(按顺序是 ref1、num1、num2)。为什么输出 20 20 20? ref1 改变也会改变 num1?参考值对我来说是一个新概念,所以如果这是一个愚蠢的问题,我很抱歉。我知道你们更喜欢指针值,但在课堂上这是我们正在学习的,所以我想把它记下来。谢谢!

#include <iostream>

int main()
{
int num1 = 10;
int num2 = 20;
int &ref1 = num1;

ref1 = num2;

std::cout << "Ref1: " << ref1 << std::endl
          << "Num1: " << num1 << std::endl
          << "Num2: " << num2 << std::endl;
}

【问题讨论】:

  • 另外我如何找出它们的内存值/地址?这也是完全让我失望的事情。我想我可能想为此提出一个单独的问题?

标签: c++ reference cout ref


【解决方案1】:

为什么会输出 20 20 20

ref1 是对 num1 的引用,因此当您将 ref1num2 一起分配时,实际上您分配了 num1 到 num2,这是引用的目标

如果你这样做了,就这样

int * ref1 = &num1;

*ref1 = num2;

我如何找出它们的内存值/地址

右侧的

ref1printf 中的情况)给出了 num1 的值,以获得被引用元素的地址而不是它的值通常使用 &,所以 &ref1&num1。请注意,您不能重新分配引用,只能初始化它们

【讨论】:

  • 就是这么简单哇!我想我一定错过了一些步骤。我想我只是想把一个简单的概念过于复杂化。谢谢布鲁诺!
  • 或许值得一提的是&amp;ref1num1的地址
  • @idclev463035818 是的,你是对的,我编辑了我的答案,谢谢
  • @SalvGi 我的意思是在 ref1 = num2 之后没有任何变化,事实上 ref1 仍然是对 num1 的引用,不是 num2。也许我的句子如果不清楚,您认为删除它会更好吗?
  • @bruno 不,现在你说了那部分是有道理的!我只是想跟上,不想犯错误。你帮了大忙!
【解决方案2】:

你可以理解为引用变量是别名,即现有变量的另一个名字 因此 ref1 的另一个名称 num1 当您执行 ref1=num2 时,ref1 被分配 num2 值,即 20,类似地 num1 被分配 20 值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多