前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >左值与右值

左值与右值

作者头像
pigeon
发布2022-04-11 19:50:31
5040
发布2022-04-11 19:50:31
举报
文章被收录于专栏:电子荣耀电子荣耀

左值与右值

问题阐述

赋值表达式中可以分为左值(lvaule)和右值(rvaule),那么什么是左值和右值?数组名做为左右值时又具有怎样的意义?

lvalue估计来源于left value。在赋值语句中lvalue = rvalue;位置处于左边。就是可以修改的值。

rvalue估计来源于right value。处于赋值语句右边,是只读的不可修改的值。

左值是指可以被赋值的表达式,也就是赋值符号左侧的表达式。由此可以知道,右值就是指出现在赋值符右侧的表达式。每一个赋值语句都有一个左值和一个右值。

(1)左值必须是变量。左值必须是内存中一个可存储的变量,而不能是一个常量或

者表达式。例如,下面是正确的左值

int i;

int *p;

i=5;

*p=3;

i是一个整型变量,在内存中有一个对应的存储位置。因此,语句i=5中,i可以作为一个左值。在语句*p=3中,*p表示p指向的内存区域,因此,*p是一个左值。而下面几个例子就不是左值。

#define PRICE 10

int i,j;

PRICE=20;

(i+j)=10;

上面的代码中, PRICE是一个常量值,其值不能改变,因为常量不表示内存中可存储的位置;而(i+j)是一个表达式,也不能表示内存中可存储的一个位置。所以这两个赋值语句的左值都是不正确的

(2)右值可以是常量或者表达式,例如

#define PRICE 10

int i,j;

int *p:

i=5;

j=i+5

*p=PRICE;

(3)赋值语句必须有一个左值和一个右值。一条赋值语句必须有一个左值和一个右值,否则将无法通过编译。

数组名作为左右值的意义:

当数组名作为左值时,是错误的。编译器会认为数组名作为左值代表的意思是数组的首元素的首地址,但是这个地址开始的一块内存是一个整体,只能访问数组中某个元素,而无法访问整个数组,所以可以把a[3]当左值,而不能把a当左值。

数组名代表数组的首地址,所以数组名作为右值时将数组的首地址赋给赋值符左侧的变量。

综上,数组名不可以作为左值,而数组中的元素是可以作为左值的。因为数组中的每个元素也可以被看作是一个变量,其在内存中有对应的存储位置。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子荣耀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档