经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
左值与右值
来源:cnblogs  作者:茶屋Teahouse  时间:2021/5/31 9:11:10  对本文有异议

左值与右值?

左值(L-value)与右值(R-value),二者之间的区别是什么?

左值与右值

01

这两个术语是多年前由编译器设计者所创造并沿用至今的,尽管它们的定义并不与C语言严格吻合。

02

左值就是那些可以出现在赋值符号左边的东西;右值就是那些可以出现在赋值符号右边的东西。

这样的解释有些脱下裤子放屁的意思,通过名称我们也能得出左值和右值的意思,那么应该出现在赋值符号左边的东西是什么呢?

03

  1. 1. a = b + 1;
  2. 2. b + 1 = a;

在语句1中,a是一个左值,因为它标识了一个可以存储结果值的地点;b + 25是个右值,因为它指定了一个值。

那么,能像语句2一样,互换左右值的位置吗?

原先用作左值的a此时也可以作为右值,因为每个位置都包含一个值。然而,b + 25无法作为一个左值,因为它并未标识一个特定的位置。因此,语句2是非法的。

04

  1. int a = 5;
  2. ++(a++);

如果尝试执行此段代码,则会出现如下报错

  1. main.c:4:2: error: expression is not assignable
  2. ++(a++);
  3. ^ ~~~~~
  4. 1 error generated.

报错的意思为: 表达式不可赋值

++(a++)拆解,++(a = a + 1) -> ++(5) -> 5 = 5 + 1。拆解之后,很容易就能发现问题所在。5是一个常量,它无法被赋值为6。

05 左值与右值

左值: 是指用于识别或定位的一个标识符,同时左值还必须是可以被改变的

右值: 任何可以被读取的值都是右值(非左值)

原文链接:http://www.cnblogs.com/bogendihong/p/14826244.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号