网站大量收购独家精品文档,联系QQ:2885784924

浅谈C语言中自增自减运算.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈C语言中自增自减运算

浅谈C语言中自增自减运算   【摘 要】C语言的内部运算符很丰富,其中最难理解的是在使用过程中最易得到模棱两可结果的自增自减运算符,特别是遇到多个自增自减运算符连续出现在表达式中的时候,结果更是让人无法估测。本文结合词法分析中的“贪心法”对这两个运算符的使用做了详细说明。   【关键词】贪心法 自增自减 词法分析   【中图分类号】G642 【文献标识码】A 【文章编号】1674-4810(2013)12-0080-02   C语言在计算机软件开发中的作用日益重要,它以独特的魅力征服了很多编程工作者,已成为世界上广泛流行的、最有发展前途的计算机高级语言。它适用于编写各种系统软件,也适用于编写各种应用软件。针对C语言的教学,笔者谈谈对自增自减运算符的几点看法。   一 自增和自减运算符的作用和特点   自增运算符(++)和自减运算符(――)都是单目运算符,它们的作用分别是使操作数加1和减1,换句话说:x=x+1;同++x,x=x-1;同――x,自增和自减运算符可用在操作数之前(前缀形式),也可放在操作数之后(后缀形式)。例如:“x=x+1;”可写成“++x;”或“x++;”,“x=x-1;”可写成“――x;”或“x――;”,但是表达式中这两种用法是有区别的,首先自增运算符和自减运算符在操作数之前(前缀形式)“++x,――x”:先使变量x的值加1或减1,再使用变量x的值。其次自增运算符或自减运算符在操作数之后(后缀形式)“x++,x――”:先使用变量x的值,再使变量x的值加1或减1。   在教学中我们应该注意以下几点:(1)使运算对象的值在原来的基础上加1或减1是自增运算符和自减运算符的特点。所以自增或自减运算其实和赋值表达式的功能是一样的。(2)运算符两边的运算对象的数据类型可以是整型的,也可以是实型的,但不能是常量或表达式。所以++5、(a+b)--等都是不合法的。(3)表达式若是由自增或自减运算符构成的,它的运算符就可以出现在运算对象的前面,也可以出现在运算对象后面,也就是前缀和后缀形式都可以,对于运算对象而言,结果是一样的,但从表达式的角度看,结果就是不一样的。(4)从优先级上来看,运算符“++”和“--”的结合??向是“从右到左”。假设有一表达式-a++,其中a的初始值为1,因为在运算符中,就相当于-(a++)运算,结果为-1,然后a自增为2。   二 自增和自减运算符的结合性   自增和自减运算符都是“从右到左”的结合方向,如果说a=3,那么计算:-a++,实际上就相当于计算-(a++)这个表达式,这时自增运算符“++”为后缀形式,(a++)的值为3,而-(a++)的值为-3,然后a的值自增为4。像这种简单的自增自减运算,我们按运算符的优先级和结合性处理还是比较容易解决的。若是遇到多个自增自减运算符连续出现在表达式中的时候,结果就可能模棱两可,有时更是让人无法估测。下面让我们来看一个复杂一些的例子:   例1:a+++++b的含义是什么?   我们为了验证它的含义,编写了一个小程序:   int main()   {   int a = 0;   int b = 0;   int c = 0;   c = a+++++b;   printf ( a+++++b The result is %d,c);   return 0;   }   左值就是可以在“=”左边,能被赋予值的东西;右值则是在“=”右边,可以赋值给别人的东西。所以左值必须是有内存空间的东西;而右值则既可以是变量,也可以是常量和某种表达式,只要能提供一个值即可。但这个程序是不能通过编译的,也就是说,尽管我们可以正确地理解这个表达式,但在编译过程中会产生错误。为什么a+++++b会编译错误呢?   第一,编译器在读入此语言时,遇到连续多个+,如+++++,自动识别位((++)++)+,即会++比+更优先识别。   第二,++运算需要左值的。a+++++b等价于((a++)++)+b。a++没问题,但问题就在于a++却不能作为左值,即不能被赋予值,因为a++是先返回a的值进行运算,然后再对a的引用加1。然而a的值(value-a)是不能作为左值的。所示((a++)++)错误。++a为什么可以作为左值呢?原因在于++a是对a的引用加1,然后返回a的引用。a的引用当然可以作为左值,被赋值了。   C语言中的某些符号,例如:/、*和=,只有一个字符长,称为单字符符号。而C语言的其他符号,例如:+=和==,以及标识符,包括了多个字符,称为多字符符号。当C编译器读入一个字符/后又跟了一个字符*,那么编译器就必须做出判断:是将其作为两个分别的符号对待,还是合起来作为一个符号对待。C语言对这个问题的解决方案可以归纳为一个很简

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档