我正在学习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
答案 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。