C语言,关于左值,右值的概念问题

图片中三条红线1.左值是用于标识特定数据对象的名称或表达式。请举例标识数据对象的表达式2.本来有问题,想了想应该是表述不清,解决第一个问题这里就解决了,不问了3.且本身不... 图片中三条红线1.左值是用于标识特定数据对象的名称或表达式。请举例标识数据对象的表达式2.本来有问题,想了想应该是表述不清,解决第一个问题这里就解决了,不问了3.且本身不是左值。为什么这样说?如何理解这句话 展开
 我来答
chiconysun
2017-01-02 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2592万
展开全部
1、例如:a[3] = 5;*p = 55;
2、非常量的变量空间可以写入,自然就是左值了
3、右值指的是常量或者比如算术运算的中间结果,只能读出,不能写入,当然就是右值了
一般而言,左值是可以作为右值的,左值的本意是只写,右值的本意是只读
更多追问追答
追问
问题1,*p或者*(a+3)这种写法叫什么表达式? 取地址内容表达式?
左值的本质是地址,是指向数据对象的名称,而*p是p所指向地址的内容,这两者说法不冲突吗?(并不否认可以这样写,只是不解为何如此描述。一定是我哪里概念理解有错误。)

问题3,书中原话“且本身不是左值”,而你的回答“左值可以作为右值”
我也认为左值可以作为右值,所以不解书中为何如此描述,望详解,最好能举例。

谢谢
追答
1、左值不是地址,地址是右值
*p是对地址的反引用,不是取地址
左值的本质是可以写入的地址(空间),不能写入的还是右值,比如const int N = 3;
那么N=4; 就不合法
3、本身不是左值就是指的是只读的如常量和中间值,比如3 + 5=a,肯定3+5不能写入,要写入往哪里写?一般而言,C语言中左值只是可以当做右值而已,发散地说,某些场合下只写的还真的不能往外读出,比如FTP上文件路径的权限就是读写各是各的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式