用于初始化引用的指针引用的值
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)
。这样可以使您的代码更清晰。
抱歉,我在移动设备上,我还不知道如何设置帖子的格式。
好吧,我对以下陈述有一个微不足道的疑问
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)
。这样可以使您的代码更清晰。
抱歉,我在移动设备上,我还不知道如何设置帖子的格式。