c语言中出现左操作数必须是左值(摘抄)
2016-05-20 19:26
295 查看
http://blog.163.com/zhangjun516@126/blog/static/164345335201282894854960/
在做c语言联系的时候,总是会出现左操作数必须是左值,左值就是在赋值中可以放在赋值操作符两边的值,比如: int a = 1; double b = 2.0 a = b; b = a; 这里a和b都是左值,一切变量都是左值,但const量是例外。
*p是一个左值,和变量一样,只要在*p的右边加上赋值运算符,就可改变*p的值。 如果p是一个指向常量的指针,*p就是一个不能修改的左值,即它不能被放到赋值运算符的左边。 i和 -i 都是表达式 但一个是左值(i),一个是右值(-i)。 ++,--这两种操作符要求作用于左值,所以i++合法,(-i)++不合法。
不严谨的讲,左值右值的区分在于位于等号的那一侧,左侧的是左值,通常是一个变量,右侧的是右值,可以是一个变量,或者是一个表达式。 先看什么是表达式: 表达式由一个或多个操作数通过操作符组合而成。最简单的表达式仅包含一个字面值常量或变量。较复杂的表达式则由操作符以及一个或多个操作数构成。 再看什么是左值: C++ 中存在两种表达式:左值可以出现在赋值语句的左边或右边。右值只能出现在赋值的右边,不能出现在赋值语句的左边。 另外说明一下,i不仅是一个表达式,它还是一个变量,但是-i却不是一个变量,这是他们一个可以自增一个不能自增的根本原因
对于i++来说,i是一个变量,所以是一个左值,执行i=i+1 但是对于(-i)++来说,-i是一个表达式,而不是一个变量,一个表达式是不可以作为左值的,因为没有办法执行这条语句:-i=-i+1(-i+1的值不能附给-i,因为没有-i这个变量存储空间) 一个赋值表达式: X = Y; 在这个表达式里,符号X的含义是X所代表的地址,这被称为左值,左值在编译时可知,左值表示存储结果的地方; 在这个表达式里,符号Y的含义是Y所代表的地址的内容,这被称为右值,右值在运行时才可知,如无特别说明,右值表示“Y的内容”。
在《C专家编程(中文版)》中第4章,对左值和右值的基本描述。 而右值则是只可以放在赋值操作符右边的值,比如: int a = 0; char *b = "hello"; 3 = a; // ERROR "howdy" = b // ERROR 这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值
相关文章推荐
- C++程序错误集锦,如:thiscall,_tmain已经定义,重载,未定义的标识符
- c++模版应用实例
- c++第6次实验
- C语言可变参数函数
- 在Windows下搭建C++11 编译环境(附下载,包括mingw-build,TDM-GCC, nuwen MinGW Distro)
- C++第六次作业
- 【学习C++】C++ Primer Plus (第六版)第十一章编程练习1-7
- java/C.C++线程while循环无法跳出问题分析
- C++作业6
- 用C语言做520表白图(较简单)
- c++中的回调函数的实现
- 动态链接库使用.def导出一个c++类的函数
- 双向循环链表list(C++)
- C++Lambda学习
- 基于arm的C++反汇编 基本数据类型
- C++第六次上机实验
- c++实现读写共享锁
- C++ bind原理
- C语言 动态库简单开发
- C++实验6-数组操作