ddrreeaamm
c,php,python,java,linux,javascript

导航

 

在做c语言练习的时候,总是会出现左操作数必须是左值. 比如 c语言的引用:

  int  & a = 9; (x) 

  const int & a = 9; (√)

 

左值可以出现在赋值语句的左边或右边。右值只能出现在赋值的右边,不能出现在赋值语句的左边。

左值就是在赋值中可以放在赋值操作符 两边 的值比如:

   int a = 1;

   int b = 2;

   a = b; b = a;    这里a和b都是左值,一切变量都是左值,但const量是例外.

 

 *p是一个左值,和变量一样,只要在*p的右边加上赋值运算符,就可改变*p的值。 如果p是一个指向常量的指针,*p就是一个不能修改的左值,即它不能被放到赋值运算符的左边;

        i和 -i 都是表达式 但一个是左值(i),一个是右值(-i);  why? -- i不仅是一个表达式,它还是一个变量

        但是 -i 却不是一个变量,-i是一个表达式,而不是一个变量,一个表达式是不可以作为左值的;

        什么是表达式: 表达式由一个或多个 操作数 通过 操作符 组合而成。最简单的表达式仅包含一个 字面值常量 或 变量。较复杂的表达式则由操作符以及一个或多个操作数构成。

 

       ++、-- 这两种操作符要求作用于左值,所以i++合法,

       (-i)++不合法  ->   -i=-i+1(-i+1的值不能附给-i,因为没有 -i 这个变量存储空间

 

一个赋值表达式: X = Y; 在这个表达式里,符号X的含义是X所代表的地址,这被称为左值,左值在编译时可知,左值表示存储结果的地方; 在这个表达式里,符号Y的含义是Y所代表的地址的内容,这被称为右值,右值在运行时才可知,如无特别说明,右值表示“Y的内容”。

 

 右值是只可以放在赋值操作符右边的值,比如:

   int a = 0;

   char *b = "hello";

   3 = a; // 错误!

   "howdy" = b // 错误!

   这里3和"howdy" 都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值!

posted on 2013-10-11 21:58  小帽儿  阅读(590)  评论(0)    收藏  举报