- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对C语言自增自减运算符分析
对C语言自增自减运算符分析
[摘要]详细归纳使用自增自减运算符时的注意事项,并且结合运算符的优先级和自增自减运算本身的特点,对TurboC环境下的自增自减运算符在不同表达式中的运算规则进行详细分析与总结。
[关键词]C语言自增自减运算符运算规则
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1120062-01
C语言具有丰富的运算符,对于各个运算符,不仅规定了操作量的类型、优先级别,还规定了结合方向,使得C语言的表达式具有简洁、高效、使用灵活的特点。在诸多运算符中,最难理解、最容易出错的便是自增、自减运算符。但是,在C语言的众多教材和参考书中,对C语言中的自增、自减运算符并没有作详细地论述,从而导致各种不同的解释,造成理解上的混乱。下面将对Turbo C环境中自增、自减运算符的功能及运算规则作一些详细分析。
一、自增、自减运算符的作用及表现形式
自增运算符为“++”,其作用是使变量的值增1;自减运算符为“--”,其作用是使变量的值减1。自增、自减运算符包括两种形式:前缀式(++i,--i)和后缀式(i++,i--)。前缀式中先加减i的值再使用变量i,后缀式中先使用i的值,再加减i的值,即前缀运算是“先变后用”,而后缀运算是“先用后变”。例如:
x=y=3;
z=++x;/*先使x增1,再将x的值赋给z,运算结果:z=4,x=4*/
N=y++;/*先将y的值赋给n,再使y增1,运算结果:n=3,y=4*/
二、自增、自减运算符的操作对象
自增、自减运算符的操作对象只能是变量,而不能是常量或表达式。因为自增自减运算符具有对运算量重新赋值的功能,常量、表达式并无存储单元可言,自然不能做自增、自减的运算。只要是标准类型的变量,不论整型、实型、字符型还是枚举型都可以作为这两个运算符的运算对象。
如以下四个表达式都是合法的:i+++j++、++i+(++j)、++a+b++、++array[--j];而++6、(i+j)++、A++、++i+++j、(p)++这五个表达式却是不合法的。为什么i+++j++合法,而++i+++j却不合法?因为C的编译器对程序编译时,是从左到右尽可能多地将字符组合成一个运算符或标识符,因此i+++j++等效于(i++)+(j++),两个“++”作用的对象都是变量,这是合法的;而++i+++j等效于++(i++)+j,第1个“++”作用的对象是表达式“i++”,这是不允许的。
三、自增自减运算符的运算规则
很多C语言教材和参考书对自增运算符运算规则的叙述是“按照‘自右至左’的结合性进行自增自减运算”。但在实际的编程过程中我们发现,自增自减运算符在不同表达式中的运算规则却不尽相同,下面我们从以下几方面来分析。
(一)赋值表达式中的自增自减运算符
程序1:main()
程序运行结果如下:k=9,i=6;k=18,i=6;k=15,i=6。
分析:在赋值语句中,自增、自减运算符若作为前缀式,其运算优级高于其他算术运算,即先按照“从右至左”的结合性进行自增、自减运算,再进行其他运算;若作为后缀式,其运算优先级低于其他算术运算,即先进行其他算术运算,再按照“从右至左”的结合性进行自增、自减运算。
在表达式k=(i++)+(i++)+(i++)中,自增运算是后缀式,其运算规则低于算术运算。因此,变量i本身先参与算术运算,即k=3+3+3=9,再按照“从右至左”的结合性进行自增运算,即i++;i++;i++;最后,i的值为6。
在表达式k=(++i)+(++i)+(++i)中,自增运算是前缀式,其运算规则高于算术运算。因此先从右至左,依次计算++i;++i;++i;i的值变为6,再进行加法运算,即k=6+6+6=18。
在表达式k=(++i)+(i++)+(++i)中,是两个前缀式和一个后缀式混合运算的情况。根据我们的理解,i先进行两次加1运算,++i;++i;i的值变为5,然后,再参与加法运算,即k=5+5+5=15,最后,进行i++运算,i的值变为6。
(二)逻辑表达式中的自增自减运算符
在这里主要讨论逻辑与()运算符和逻辑或(||)运算符。单纯从优先级来考虑,这两个逻辑运算符的优先级远低于自增运算符。但在实际运算中不能仅仅从运算符优先级的观点考虑问题;
程序2:main()
{int a,x=0,y=0,z=0;a=++x||++y++z;
printf(“a=%d,x=%d,y=%d,z=%d\n”,a,x,y,z);}
程序运行结果如下:a=1,x=1,
文档评论(0)