+ -
当前位置:首页 → 问答吧 → 表大式的左值?

表大式的左值?

时间:2011-12-18

来源:互联网

《C语言参考手册》表7.1
表中说,字符串常量可以作左值!字符就不是左值?对否?

"abc"; //正确。
'a'; //错误?

作者: goojnag   发布时间: 2011-12-18

字面值都不可以做左值

作者: mougaidong   发布时间: 2011-12-18

引用 1 楼 mougaidong 的回复:
字面值都不可以做左值

++

作者: whoami1978   发布时间: 2011-12-18

变量和文字常量都有存储区并且有相关的类型区别在于变量是可寻址的
addressable 对于每一个变量都有两个值与其相关联
1.它的数据值存储在某个内存地址中有时这个值也被称为对象的右值rvalue 读
做are-value 我们也可认为右值的意思是被读取的值read value 文字常量和变量都可
被用作右值
2.它的地址值——即存储数据值的那块内存的地址它有时被称为变量的左值lvalue
读作ell-value 我们也可认为左值的意思是位置值location value 文字常量不能被用作
左值

作者: mingliang1212   发布时间: 2011-12-18

在C语言中,好像是可以改变字常量字符串的。可能会被当作左值吧。但是这个是不建议这么做 的。上面是c++primer的说法

作者: mingliang1212   发布时间: 2011-12-18

有点忘记啦!!!

作者: yangmingtang   发布时间: 2011-12-18

supermegaboy 正在推荐他的博客

作者: AnYidan   发布时间: 2011-12-18

《C语言参考手册》表7.1
表中说,字符串常量可以作左值!

垃圾玩意儿,还不丢了干嘛.误导大批初学者. 左值通俗地讲就是可以改变其值的变量.(当然我说的不全面)

作者: CN7712   发布时间: 2011-12-18

&"abc";

字符串常量当左值。是不是这样的意思?

作者: goojnag   发布时间: 2011-12-18

7楼:
你才是误导别人!发些乱七八槽的贴!

作者: goojnag   发布时间: 2011-12-18

不对 //回复内容太短了!

作者: neolyao   发布时间: 2011-12-18

表7.2
&
++,--
上面这些必须有左值的操作符,给个实例!

作者: goojnag   发布时间: 2011-12-18

引用楼主 goojnag 的回复:
《C语言参考手册》表7.1
表中说,字符串常量可以作左值!字符就不是左值?对否?

"abc"; //正确。
'a'; //错误?

这句话主体意思是正确的,但个别术语的使用不够严谨。

C中的字符串字面量不是常量,因为C认为常量和常量表达式必须是编译期确定的,而字符串字面量由于实现为数组,编译期还不存在,因此C并没有把字符串字面量归入常量,但字符串字面量各元素及其本身的地址都属于常量表达式中的地址常量表达式。C++中的字符串字面量才可称为字符串常量。

无论C还是C++,由于字符串字面量的实现是数组,所以它属于不可修改的左值。

楼主摘录的那句话应改为这样:

字符串字面量属于左值,字符常量就不是左值。

作者: supermegaboy   发布时间: 2011-12-18