【C语言】左值与右值

r囧r小猫 2022-06-17 12:21 276阅读 0赞

左值就是“=”号左边的变量或表达式,是一个确切的,具有实际空间的存储地址,右值是一个数据,因此左值不能是一个字面值。

按字面意思,通俗地说。

就是以赋值符号 = 为界,= 左边的就是左值,= 右边就是右值。

比如:

  1. (1) int b = 3;
  2. (2) int a = b;
  3. 第(2)行代码,a为左值,b为右值。

更深一层

可以将 L-value 的 L, 理解成 Location,表示定位,地址,代表一个内存地址值 将 R-value 的 R
理解成 Read,表示读取数据,是真实值

现在的计算机数据放在内存。内存有两个很基本的属性:内存地址和内存里面放的数据。想象完全一样的箱子。每个箱子有个编号,用来区分到底是哪个箱子,箱子里面可以放东西。内存地址相当于箱子的编号,内存的数据,相当于箱子里面放的东西。

变量名编译之后,会映射成内存地址。看看a = b的含义。其实就是 将 “b地址内存里面的数据”,放到”a地址内存”中。

左值和右值是相对于赋值表达式而言的。左值是能出现在赋值表达式左边的表达式。左值表达式可以分为可读写的左值和只读左值。右值是可以出现在赋值表达式右边的表达式,他可以是不占据内存空间的临时量或字面量,可以是不具有写入权的空间实体。
如:

  1. int a=3;
  2. const int b=5;
  3. a=b+2; //a是左值,b+2是右值
  4. b=a+2; //错!b是只读的左值但无写入权,不能出现在赋值符号左边
  5. a=4)+=28; //a=4是左值表达式,28是右值,+=为赋值操作符
  6. 34=a+2; //错!34是字面量不能做左值

其实没有什么左值和右值!只是翻译成这样的,实际是:

L-value中的L指的是Location,表示可寻址。The “l” in lvalue can be though of as

location R-value中的R指的是Read,表示可读。The “r” in rvalue can be thought of as”read” value.

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++

    左值(lvalue)右值(rvalue) 在C++11中所有的值必属于左值、右值两者之一,可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值。

    相关 C 语言

    C 语言左值和右值 术语 `lexp` 表示左值表达式,`rexp` 表示右值表达式。 左值意味着一个位置,而右值意味着一个值。在使用右值的地方也可以使用左值,但是在

    相关 C语言

    > `左值就是“=”号左边的变量或表达式,是一个确切的,具有实际空间的存储地址,右值是一个数据,因此左值不能是一个字面值。` 按字面意思,通俗地说。 > 就是以赋值符号 =

    相关 JavaScript

    JavaScript 左值与右值 编程中,很多概念虽然编写者已经在使用,但自己并没有意识到。 生活中也有很多类似的例子,比如著名的苹果落地现象。 很少人去思考原因,因为大...