专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

C语言左值与右值详解

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/17 11:54:59       共计:3595 浏览
左值是用来指明一个对象的表达式。最简单的左值就是变量名称。左值(lvalue)之所以称为“左”(以首字母为 L,代表 left),是因为一个左值表示一个对象,它可以出现在赋值运算符(assignment operator)的左边,例如“左表达式=右表达式”。

其他表达式(那些表示一个值但不指明一个对象的),被类似地称为右值(rvalue)。右值是可以出现在赋值运算符右边而不是左边的表达式。例如,常量和算术表达式。

从一个左值中必定可以解析出对应对象的地址,除非该对象是位字段(bit-field)或者被声明为寄存器存储类。生成左值的运算符包括下标运算符(subscript operator)[]和间接运算符(indirection operator)*,如下表所示(如果 array 已被声明为数组,而 ptr 被声明为指针变量)。

表1 指针和数组表达式可能是左值
表达式 是左值吗
array[1] 是;一个数组元素是一个具有位置的对象
&array[1] 否;此对象的位置,并非一个具有位置的对象
ptr 是;此指针变量是一个具有位詈的对象
*ptr 是;指针所指的地方是一个具有位置的对象
ptr+1 否;此加法产生一个新的地址值,但不是一个对象
*ptr+l 否;此加法产生一个新的算术值,但不是一个对象

对象可以被声明为常量。在这种情况下,该对象就不能位于赋值运算的左边,尽管它是左值,如下面的例子所示:
int a=1;
const int b=2, *ptr=&a;
b=20;           //错误:b被声明为const int
*ptr=10;        //错误:ptr被声明为const int的指针
在这个例子中,表达式 a、b、ptr 和 *ptr 都是左值。但是 b 和 *ptr 是常量左值。因为 ptr 被声明为指向 const int 的指针,不能使用它修改它所指向的对象。

赋值运算左边的操作数,以及任何自增或自减运算符(++ 和 --)的操作数,不仅应该是左值,还应该是可修改的左值可修改的左值,其类型不可以被声明为限定符 const,并且可修改的左值不能是数组类型。如果可修改的左值所表示的对象是结构或联合类型,那么它的元素都不可以被声明(不管是直接地或间接地)为具有限定符 const 的类型。
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:计算机文件到底是什么(通俗易懂)? | ·下一条:cin.ignore():C++跳过(忽略)指定字符

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有