加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言---“前++和后++的区别”

(2014-09-18 14:12:07)
分类: 《C与指针》学习笔记

左值表示可以位于赋值符(=)左边或者右边的变量,它代表着一个可以用来存储数据的内存空间;而右值只能位于赋值符右边,因为它被没有对应的一个内存空间。

例如:

int a=1

int b=a

第一个语句中a是左值,1是右值。在第二个语句中a作为右值给另一个变量赋值。但是常量1不能作为左值,例如语句“1=a;”是非法的。

 

延伸:对比(++a)(a++)

int a=0

++a=1//合法语句,因为++a对应a变量的内存空间

a++=2//非法语句,因为a++只是a变量的一个值的拷贝,不对应a的内存空间

C语言中,前缀自增(++a)和后缀自增(a++)操作符并不是同一个操作符,前缀自增操作符的优先级高于后缀自增,同时得到的结果并不完全一致,因此需要区分。这样的结果是由编译器所决定的,虽然不同的编译器可以指定一套属于自己的标准,但这样的编译器有可能并不符合统一的规范,造成程序无法移植到到使用其他编译器的机器上运行。因此大多数编译器遵从一定的标准规范,例如ANSI C标准。所以大部分语句的合法性在大部分编译器上都通用,而未在标准内的其他情况需要单独考虑。例如:“c + --c;”这条语句的执行顺序就不在标准中,移植时需要考虑编译器的情况。

 

例子:

int a=0,b=0;

a+++++b;//非法语句,++操作符优先级高于+,所以先进行a++,然后(a++)++,由于(a++)是一个右值,不能进行自增操作,就想无法进行2++一样,所以语句非法。

a+++(++b);//合法

 

所以,进行自增操作时需判断操作数是否为左值。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有