C语言,关于左值,右值的概念问题
图片中三条红线1.左值是用于标识特定数据对象的名称或表达式。请举例标识数据对象的表达式2.本来有问题,想了想应该是表述不清,解决第一个问题这里就解决了,不问了3.且本身不...
图片中三条红线1.左值是用于标识特定数据对象的名称或表达式。请举例标识数据对象的表达式2.本来有问题,想了想应该是表述不清,解决第一个问题这里就解决了,不问了3.且本身不是左值。为什么这样说?如何理解这句话
展开
1个回答
展开全部
1、例如:a[3] = 5;*p = 55;
2、非常量的变量空间可以写入,自然就是左值了
3、右值指的是常量或者比如算术运算的中间结果,只能读出,不能写入,当然就是右值了
一般而言,左值是可以作为右值的,左值的本意是只写,右值的本意是只读
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上文件路径的权限就是读写各是各的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询