标题:那位大佬能否用简单明了的一句话说明一下,左值右值的区别
只看楼主
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
结帖率:87.5%
已结贴  问题点数:19 回复次数:16 
那位大佬能否用简单明了的一句话说明一下,左值右值的区别
谢谢大家了
搜索更多相关主题的帖子: 区别 
2020-03-10 15:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
没办法
C语言值类别:https://zh.
C++语言值类别:https://zh.

2020-03-10 16:10
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:5 
左值:标识的应该是个存储位置,内存中的位置,左值可以是个变量名,或者是个表达式,但表达式必须表示的是个内存位置

右值:就是个值,变量的值,表达式的值
2020-03-10 16:53
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:5 
这是一下庞大的知识量,不是几句话可以讲清的,我也是刚知道有左值和右值的存在,总结了一下少部分知识点
左值就像一个大空桶子,里面有空间,可以在里面装东西呀,当然能装东西就能从空桶里取出东西来,当然空桶里的东西怎么摆放是你自己的事了,取出来只需要看地址就行了,
右值就像一个地板,如果一个物体(比如花瓶)暂时不需要放进大空桶里,就先放地上,等什么时候花瓶看腻了再把它从地板上拿出来然后在放进空桶里,不过你拿花瓶是从地板上拿的,地板只是个临时放东西的地方

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-10 17:27
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:5 
在C语言程序设计中需要清晰地分辨真值、右值、左值这三个概念。
真值:仅仅具有数值的概念,再无任何其他的意义。可以和数学中的整数和小数等同。
右值:有了数据类型的意义,也有了在该数据类型上可执行的操作。对于整型、浮点型这些简单数据类型的变量,其右值等价于其真值,在其上可以执行加减乘除以及其他的数学运算;对于数组、结构体等复杂数据类型的变量,没有真值的概念,但具有特定的操作。右值仅仅是个逻辑概念,在内存中并不存在。
左值:左值与右值的不同,仅仅是在内存中存在一个内存空间,如果按数据类型的角度将该内存空间的值读取出就可以得到右值。

一些情况下,对于真值,我们可以对其进行强转变成另一种数据类型,但此时得到的不是真值而是右值。比如对于char类型的变量,我们可以强转成int类型;也可以反过来强转,只是其真值可能会发生变化。
一些情况下,对于右值,我们也可以对其进行强转,用得最多的情况是将某一种指针类型的对象转换成另一种指针类型,但是其真值并没有发生变化,还是那个地址编号。
通常,我们不会对左值进行强转。一般是强转得到其的右值,然后进行读取或写入操作。

以上就是一点理解吧,很有可能是有一些错误,感谢群里的其他大神帮忙指正。本着不误人子弟的原则,建议大家也参考其他的文献资料。
2020-03-10 22:48
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用自学的数学在2020-3-10 16:53:27的发言:

左值:标识的应该是个存储位置,内存中的位置,左值可以是个变量名,或者是个表达式,但表达式必须表示的是个内存位置

右值:就是个值,变量的值,表达式的值

你对表达式的理解有问题
左值也好
右值也好
变量名也好
都属于表达式

可以是个变量名,或者是个表达式
这是一个病句 雷同于 可以是个男人 或者是个人

https://zh.
2020-03-11 11:17
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
以下是引用lin5161678在2020-3-11 11:17:57的发言:


你对表达式的理解有问题
左值也好
右值也好
变量名也好
都属于表达式

可以是个变量名,或者是个表达式
这是一个病句 雷同于 可以是个男人 或者是个人

你对表达式理解有误区啊

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-11 13:39
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
关于左值右值用几句话其实也能表达, 左值是具有地址(在内存中)的值。由于所有变量都有地址,因此所有变量都是左值。之所以使用左值,是因为左值是赋值语句左侧唯一的值。当我们进行赋值时,赋值运算符的左侧必须为左值。
 右值是指可以分配给左值的任何值。总是评估右值以产生单个值。 右值的示例是文字(例如5,其结果为5),变量(例如x,其结果为最后分配给它的值)或表达式(例如2 + x,其结果为该值) x+2)。
不过可以通过& 和const进行左右值的转化

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-25 00:14
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 7楼 叶纤
请指教

https://zh.
2020-03-25 00:51
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
回复 9楼 lin5161678
您说左值和右值都属于一个表达式
以下说法是我从学习网站里了解来的。当然可能和c语言有些碰撞,不过像表达式表达语句应该碰撞的比较少
先说说第一个   表达式
表达式 是文字,变量,运算符,和显示函数调用的组合,他们产生单个输出值
执行表达式时,将对表达式中的每个术语进行求值,直到剩下单个值为止(此过程称为求值)。 该单个值是表达式的结果
例如

 4, 'a', "Hello".是表达式的值
2 + 3, x, x + 4是表达式

    表达式语句是由一个表达式和一个分号组成的语句。 执行该语句时,将对表达式进行求值(并且将舍弃表达式的结果)。
int x=5+4;这一句是表达式语句

如果对舍弃表达式的结果不明白
就拿上面表达式语句举例吧
5+4=9会把最后的值9赋值给x,然后丢掉表达式的结果
在c++表达式语句有可能很有用,有可能很没用,在c中应该是同样的吧
比如
3+2;是个很没用的表达式,因为在执行他的时候将会丢掉5
int x=5+4;是个很有用的表达式,当9丢掉的时候但是已经分配给x使用了
在c++中
如何看待cout<<1+2;呢?
直接复制。。。
堆积在CPU上或压入堆栈(RAM)。
如果将值压入堆栈,则@std :: cout.operator <<完成后将弹出该值。 请注意,堆栈没有与RAM中的其他值混合。 它有自己的保留空间。
 2)
 1和2不在内存中。 该表达式是在编译时求值的,因此3与构成您代码的字节一起存储。 它不与其他值混合,因为代码在RAM中获得了自己的空间。 根据调用约定,将3压入堆栈或保留在CPU上。
(涉及硬件上的东西我也不怎么理解,总之cout1<<1+2;和直接1+2;不一样,)



[此贴子已经被作者于2020-3-25 11:08编辑过]


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-25 10:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499691-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.387285 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved