C语言 什么叫做左值?右值?

i和-i都是表达式但一个是左值(i),一个是右值(-i)。++,--这两种操作符要求作用于左值,所以i++合法,(-i)++不合法。... i和 -i 都是表达式
但一个是左值(i),一个是右值(-i)。
++,--这两种操作符要求作用于左值,所以i++合法,(-i)++不合法。
展开
 我来答
微策略中国
2019-11-25 · 微策略专注于企业级分析和移动应用软件开发
微策略中国
微策略 MicroStrategy是企业级分析和移动应用软件的全球领导者。为企业客户提供世界一流的软件和专家服务,帮助企业部署其特有的智能应用程序。
向TA提问
展开全部

左值 ,就是指可以被取地址的表达式。简单的说,可以出现在等号左边的就是左值。比如:

另外也可以有不是变量的左值:


这里,getRef()返回的是一个全局变量的引用,它的值存在固定的位置,因此是一个左值。


右值 ,则指的是没有名字的值,它们只出现表达式的计算过程中,也就是等号的右边。例如:


getName()返回一个在函数中构造的字符串。你可以把它的值赋给一个变量,但是它是一个临时对象,我们并不知道它的值放在哪里。所以,getName()是一个右值。


说清楚了什么是左值和右值,那么什么是右值引用呢?右值引用 是C++11中新引入,是一种只绑定与右值的引用。区别与左值引用(&),它用&&来表示。与左值引用一样,它也可以是const或者是非const的,但是我们基本不会在实际应用中用到const的右值引用(这个大家可以思考一下为什么)。让我们来看一些例子:



从例子中,我们可以看到const的左值引用可以绑定到右值,非const的左值引用不能绑定到右值,右值引用可以绑定到右值。那么右值引用怎么帮助我们解决问题呢?让我们接着看右值引用在作为函数参数时的行为。假如我有下面两个函数:


第一个printReference函数是用const左值引用作为参数,从前面的例子中我们知道它既可以接受左值也可以接受右值。但是当有了第二个printReference的用右值引用的重载之后,右值将优先绑定到第二个printReference。这点我们可以通过如下代码来验证:

输出为:

xinyiran1205
推荐于2017-09-28 · TA获得超过1444个赞
知道小有建树答主
回答量:1299
采纳率:0%
帮助的人:1027万
展开全部
左值就是在赋值中可以放在赋值操作符两边的值,比如:

int a = 1;
double b = 2.0

a = b;
b = a;

这里a和b都是左值,一切变量都是左值,但const量是例外。

而右值则是只可以放在赋值操作符右边的值,比如:

int a = 0;
char *b = "hello";

3 = a; // ERROR
"howdy" = b // ERROR

这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值。

参考资料: http://zhidao.baidu.com/question/20860710.html?si=1

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友13259ee05
2008-10-21 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:25万
展开全部
感觉一楼没有回答楼主的问题,不严谨的讲,左值右值的区分在于位于等号的那一侧,左侧的是左值,通常是一个变量,右侧的是右值,可以是一个变量,或者是一个表达式。

另外说明一下,i不仅是一个表达式,它还是一个变量,但是-i却不是一个变量,这是他们一个可以自增一个不能自增的根本原因

对于i++来说,i是一个变量,所以是一个左值,执行i=i+1
但是对于(-i)++来说,-i是一个表达式,而不是一个变量,一个表达式是不可以作为左值的,因为没有办法执行这条语句:-i=-i+1(-i+1的值不能附给-i,因为没有-i这个变量存储空间)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叫我侠哥哥
2021-07-18
知道答主
回答量:21
采纳率:100%
帮助的人:5.8万
展开全部
左值是存储单元(地址,容器),右值是值(内容)。只是从不同的角度来描述“值”,至于什么时候是右值什么时候是左值,有结合当前的上下文来看,表示存储单元的时候就是左值,表示内容的时候就是右值。
就好比电场强度和电势差,电场强度是从力的角度来描述电场,电势差是从能量的角度来描述电场。

左值的定义:代表变量的表达式。 理解成左值是存储单元(地址,容器),右值是值(内容)很合适。还有一个概念就是左值转换。
int a ,b;
a=1;//a左值,1右值。
b=2;//b左值,2右值。
a=b;//a左值,b左值。这个过程有一个左值转换的过程,b进行了左值转化了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
The_facE
2008-10-23 · TA获得超过1053个赞
知道小有建树答主
回答量:1087
采纳率:0%
帮助的人:925万
展开全部
一个赋值表达式:
X = Y;
在这个表达式里,符号X的含义是X所代表的地址,这被称为左值,左值在编译时可知,左值表示存储结果的地方;
在这个表达式里,符号Y的含义是Y所代表的地址的内容,这被称为右值,右值在运行时才可知,如无特别说明,右值表示“Y的内容”。

在《C专家编程(中文版)》中第4章,对左值和右值的基本描述,其余的拓展描述你可以自己看。

参考资料: C专家编程(Expert C Programming) Peter Van Der LinDen(美)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式