用于初始化引用的指针引用的值

value referred by pointer used to intialize reference

好吧,我对以下陈述有一个微不足道的疑问

int a = 5;
int* ptr = &a; 
int &x = *ptr;
x = 3;
cout<<a;

输出为3; *ptr 将取消引用的整数值传递给引用引用 &x 但是如何更改 x 会更改 a*ptr 只是抛出一个没有地址的整数 pointing.How 来编译器将 x 绑定到 a's 地址??

在此声明之后

int* ptr = &a; 

指针ptr指向对象a。

取消引用指针

int &x = *ptr;

产生对原始对象 a 的左值引用,

所以 x 现在是对象 a 的左值引用。

效果和你最初写的一样

int &x = a;

来自 C++ 标准(5.3.1 一元运算符)

1 The unary * operator performs indirection: the expression to which it is applied shall be a pointer to an object type, or a pointer to a function type and the result is an lvalue referring to the object or function to which the expression points.

but howcome changing x changes a?

您不能 "change" 引用。当您分配给 x 时,x 引用的对象将被分配。 x指的是a,所以x的赋值就是a的赋值。

How come compiler binds x to a's address??

鉴于指针 ptr 指向 a,通过指针 *ptr 的间接寻址产生一个指向 a 的左值。因此,如果您使用此类表达式初始化引用 x,则引用将绑定到 a.

您可以使用 C++ 来实现这个不错的功能。

你以前试过这个吗?

void somefunction(int &foo) {
     foo = 3;
}

当您像这样使用该功能时:

int a = 5;
somefunction(a);
// From now on, a = 3

a 会将其值更改为 3。

同样在您的代码中,您取消引用了该值,但同时您将 a 传递给 x。

当您传递对象时,它非常有用。而且你不想做这样的事情 somefunction(&a)。这样可以使您的代码更清晰。


抱歉,我在移动设备上,我还不知道如何设置帖子的格式。