C语言中的左值右值

一般说来出现在“=”左边的是左值,出现在“=”右边的是右值,左值是可改变的值,出现在赋值号左边的符号所代表的地址上的内容一定是可以被修改的,只读变量是不能做左值的。++i

就可以作为左值,而 i++ 却不能作为左值。这也是为什么 ++++i 合法,而 i++++ 却不合法。

变量 i

i为左值时:编译器认为 i 代表的是 i 的地址,这个地址只有编译器知道,在编译时确定;

i为右值时:编译器认为 i 的含义是 i 所代表的地址里的内容,这个内容是什么,只有在运行时知道。

数组名 a

a 可以为右值。当 a 为右值时,其代表的含义是 &a[0],即数组的首元地址,而不是数组的首地址。尽管它们地址的数值是一样的,但是代表的含义不一样,比如自加的单位不同(前者与类型有关,而后者与类型和数组大小都有关)。当然 a 仅仅是代表着数组首元地址,并没有真的存储这个地址,也就是说编译器没有为数组a来分配一块内存来存储这个地址,这与指针不同。

a不可以为左值!数组分配的内存是一个整体,我们无法把数组当一个整体来访问,但是数组的元素a[i]可以作为左值。只能通过访问 a[i] 来达到访问整个数组的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值