文字字符串和函数返回值是左值还是右值?

时间:2010-01-10 20:08:42

标签: c lvalue rvalue

  1. 只是想知道文字字符串是左值还是右值。其他文字(如int,float,char等)是左值还是右值?

  2. 函数的返回值是左值还是左值?

  3. 你怎么区别?

3 个答案:

答案 0 :(得分:40)

  1. 字符串文字是左值,但你不能改变它们
  2. rvalue,但是如果它是一个非NULL指针,那么它所指向的对象就是一个左值
  3. C标准认可原始术语代表,如同L = R;但是,它会将左值视为定位器值,这大致意味着您可以获取对象的地址,因此该对象具有位置。 (见C99中的6.3.2.1。)

    出于同样的原因,标准已经放弃了术语rvalue,只使用“表达式的值”,这实际上是一切,包括文字,如整数,字符,浮点数等。此外,你可以做的任何事情使用右值也可以使用左值,因此您可以将所有左值都视为右值。

答案 1 :(得分:4)

C中有两种表达式:  1.左值:作为左值的表达式可以显示为赋值的左侧或右侧。  2. rvalue:作为rvalue的表达式可能出现在赋值的右侧但不是左侧。 变量是左值,因此可能出现在赋值的左侧。数字文字是右值,因此可能无法分配,也不能出现在左侧。以下是有效的声明:  int g = 20;  但是follow不是一个有效的语句,会产生编译时错误: 10 = 20;

答案 2 :(得分:1)

来自Microsoft的C ++有一个definition。根据这个定义, 一个文字字符串,比如说“你好世界”,是左值,因为它是常量而不是暂时的。实际上它会持续整个应用程序的生命周期。