数组名作为左值和右值的区别

简单的说,就是数组名出现在赋值符号“=”左边的就是左值,出现的右边的就是右值。

举例:  x = y ;
左值:在这个上下文环境中,编译器认为x的含义是x所代表的地址。当然,这个地址只有编译器知道咯。
右值:在这个上下文环境中,编译器认为y是y所代表的地址里面的内容。至于内容是什么,只有运行的时候,编译器才知道。

另外,C语言中引入了一个术语---“可修改的左值”,表示的是赋值符号“=”左边代表的地址上的内容是一定可以修改的。我们可以这么理解:只能对非只读的变量赋值

进入正题--->
创建一个数组  :char a[10] ;

a作为右值 很多人估计也在学习的时候,估计会 把它作为 数组的地址,这是错误的 !a作为右值时代表的意义和 &a[0]的意义是一样的, 代表 数组首元素的首地址 ,而不是数组的地址。
注意:这里只是“当作”,并没有一个地方来存储这个地址。

上面说了a作为右值,我们清楚了其含义,那么a作为左值呢?

a不能作为左值 !!!编译器会认为数组名作为左值代表的是a的首元素的首地址,但是这个地址开始的一块内存是一个整体,我们只能访问数组的某个元素,而无法把数组数组当做一个整体来进行访问。所以,我们可以把a[i]当左值,无法把a当左值。也可以这么理解:a的内部是由很多小部分组成,我们只能通过访问这些小部分来达到访问 a的目的。



  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值