C中的lvalue和rvalue
该贴子第一条回答虽然浅尝辄止,但还是很有参考价值。
https://www.quora.com/What-is-lvalue-and-rvalue-in-C
IBM一个简单的说法是:
“…通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。所有的变量都满足这个定义,在多条代码中都可以使用,都是左值。右值是指临时的对象,它们只在当前的语句中有效。”
https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/index.html
可以这样理解,“非临时”意味着该值应该存储在系统的寄存器中,而“临时”意味着该值可以存储在内存或临时寄存器中。因为rvalue临时存在于内存中,对rvalue的取地址操作是没有稳定的结果的。
回到quora的回答。
变量是表象,真正有意义的是变量对应的地址。
对于某个变量对应的地址,如果往该地址存一个数值,这是lvalue,因为该值最终需要送到寄存器用于做后续运算;如果从该地址取一个值,这是rvalue,因为取出来的值会被临时存在内存或临时寄存器中。
The difference is when a variable is used as an lvalue, the compiler sets up the computer to store a value to the address in the pointer. When it's used as an rvalue, it tells the computer to load a value from the address in the pointer into a register in preparation for some other operation, like calling a function, or for an indexing operation (for use in an array), or an arithmetic computation.
注意该段文字专门强调了store和load这两个命令。
最新文章
- UILabel 自适应宽高
- php 屏蔽NOTICE报错机制代码
- OpenStack Mitaka安装
- clientTop、offsetTop和scrollTop的区分
- BZOJ 1500 Splay 全操作
- php基础05:常量
- 使用jQuery基本过滤选择器
- JavaScript:表单验证模型
- SQLServer分页存储过程
- Linux 配置 vimrc
- 01.C语言关于结构体的学习笔记
- 根据中国气象局提供的API接口实现天气查询
- 尝试使用Java6API读取java代码
- 怎样在Win7 64位旗舰版安装Python+Eclipse开发环境
- 201521123072《java程序设计》第十二周学习总结
- 第201621123043 《Java程序设计》第13周学习总结
- 实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积
- shp2pgsql向postgresql导入shape数据
- zabbix学习-zabbix安装
- UNIX高级环境编程(15)进程和内存分配 <; 故宫角楼 >;
热门文章
- vue-axios请求
- 算法 按照ASII码从小到大输出字符(数量最多)
- Centos MySQL 5.7安装、升级教程
- SQL Join连接
- Qt开发MySQL程序发布后出现";Driver not loaded";的问题
- STM32的结构和启动模式
- 切换路由时取消全部或者部分axios请求,并将一些从不需要取消的加入白名单
- 关于respond.js
- <;自动化测试>;之<;unittest框架使用1>;
- JMeter ServerAgent服务器资源监控插件