将一个变量赋值给另一个变量和赋值给引用变量有什么区别?

问题描述 投票:0回答:2

说我有:

int a = 1
int b = a
int& c = a

b
c
有什么区别?
b
a
的单独副本吗?

c++ variables reference
2个回答
3
投票

差异在于:

  1. b 是值的副本 --> 正确。 其中 b 有自己的内存地址,用于存储其值 b = a 的值。 它只是一个变量的赋值。
  2. c 不是只复制 a 的值,而是完整地代表 a。 所以在你做了 int&c = a; 之后 现在我们有 2 个人但同名。并且您可以通过其他名称 c 完全控制 a。

令人惊讶的是你可以用下面的代码检查

int main()
{
    int a =2;
    int b =a;
    int&c =a;
    int d = 3;
    c =d;
    cout <<"a="<<a<<" b="<<b<<" c="<<c<<endl;
}

将打印

a=3 b=2 c=3

0
投票

这是三者之间的区别。当您将 b 分配给等于 a 时,您实际上是在创建一个单独的副本。但是,如果您要修改 a,则 b 将保持不变。例如,如果您将 a 增加到 2,然后打印结果,a 将等于 2,但 b 仍等于 1。另一方面,由于 c 被初始化为对 a 的引用。

每当a的值改变时,c的值也会改变。您还可以通过更改 c 的值来更改 a 的值。有关指针和引用的更多信息,请阅读这篇文章 http://www.cplusplus.com/doc/tutorial/pointers/

这是一些示例代码

#include <iostream>

int main() {
    int a = 1;
    int b = a;
    int &c = a;

    std::cout << " a = " << a << ", b = " << b << ", and c = " << c << std::endl;
    a++;
    std::cout << " a = " << a << ", b = " << b << ", and c = " << c << std::endl;
}

输出:

a = 1, b = 1, and c = 1
(after increment) a = 2, b = 1, and c = 2
© www.soinside.com 2019 - 2024. All rights reserved.