首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用引用的指针引用的值。

引用引用的指针引用的值。
EN

Stack Overflow用户
提问于 2020-04-23 10:36:26
回答 3查看 51关注 0票数 1

在下面的陈述中,我有一个小小的疑问

代码语言:javascript
复制
int a = 5;
int* ptr = &a; 
int &x = *ptr;
x = 3;
cout<<a;

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-23 10:40:47

在本声明之后

代码语言:javascript
复制
int* ptr = &a; 

指针ptr指向对象a。

删除指针

int &x = *ptr;

生成对原始对象a的lvalue引用,

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

其效果与您最初编写的一样

代码语言:javascript
复制
int &x = a;

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

1一元*操作符执行间接操作:应用它的表达式应该是指向对象类型的指针,或指向函数类型的指针,而结果是指向表达式所指向的对象或函数的lvalue。

票数 2
EN

Stack Overflow用户

发布于 2020-04-23 10:43:55

但是为什么改变x会改变一个?

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

编译器为什么将x绑定到一个地址??

如果指针ptr指向a,则通过指针*ptr的间接指向将产生一个引用a的lvalue。因此,如果使用这样的表达式初始化引用x,则引用将绑定到a

票数 1
EN

Stack Overflow用户

发布于 2020-04-23 10:47:38

有一个很好的特性,你可以用C++。

你以前试过吗?

代码语言:javascript
复制
void somefunction(int &foo) {
     foo = 3;
}

当你像这样使用这个函数时:

代码语言:javascript
复制
int a = 5;
somefunction(a);
// From now on, a = 3

A将将其值更改为3。

在您的代码中,您取消了值的引用,但同时也传递了一个到x。

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

对不起,我正在移动,我还不知道如何设置帖子的格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61385117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档