当我没有为其赋值时,为什么变量的值发生了变化?

时间:2016-09-21 03:28:27

标签: c++ pointers reference

我正在学习C ++中的指针和引用变量,我看到了一个示例代码。我不确定为什么* c的值从33变为22.有人可以帮我理解这个过程吗?

int a = 22;
int b = 33;
int* c = &a; //c is an int pointer pointing to the address of the variable 'a'
int& d = b; //d is a reference variable referring to the value of b, which is 33.
c = &b; //c, which is an int pointer and stored the address of 'a' now is assigned address of 'b'
std::cout << "*c=" << *c << ", d=" << d << std::endl; //*c= 33 d= 33
d = a; //d is a reference variable, so it cannot be reassigned ?
std::cout << "*c=" << *c << ", d=" << d << std::endl; //*c= 33 d= 33

2 个答案:

答案 0 :(得分:2)

d = a; //d is a reference variable, so it cannot be reassigned ?

这是一个误解。该语句将a(22)的值赋给d是(b)引用的变量。它确实改变了d的引用。因此,在执行该行之后,b的值为22。

答案 1 :(得分:2)

让我们一步一步地运行这段代码:

int a = 22;
int b = 33;

我们为a,b分配了值。没什么可说的。

int* c = &a;

c保存a的地址。 * c是a的值,现在是22。

int& d = b;

d是reference variable到b。从现在开始,d被视为b的别名。 d的值也是b的值,即33。

c = &b;

c现在保存b的地址。 * c是b的值,现在是33。

d = a;

我们给d分配了22(a的值)。由于d是b的别名,b现在也是22.并且因为c指向b,* c是b的值,现在是22。