浅谈c语言中的自增自减运算

浅谈c语言中的自增自减运算

ID:46472816

大小:67.50 KB

页数:5页

时间:2019-11-24

浅谈c语言中的自增自减运算_第1页
浅谈c语言中的自增自减运算_第2页
浅谈c语言中的自增自减运算_第3页
浅谈c语言中的自增自减运算_第4页
浅谈c语言中的自增自减运算_第5页
资源描述:

《浅谈c语言中的自增自减运算》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、浅谈C语言中的自增自减运算【摘耍】c语言的内部运算符很丰富,其中最难理解的是在使用过程中最易得到模棱两可结果的自增自减运算符,特别是遇到多个口增口减运算符连续出现在表达式中的时候,结果更是让人无法佔测。本文结合词法分析中的“贪心法”対这两个运算符的使用做了详细说明。【关键词】贪心法自增自减词法分析【中图分类号】G642【文献标识码】A【文章编号11674-4810(2013)12-0080-02C语言在计算机软件开发中的作用日益重要,它以独特的魅力征服了很多编程工作者,已成为世界上广泛流行的、最冇发展前途的计算机高级语言。它适用于编写各种系统软件,也适用于编

2、写各种应用软件。针对C语言的教学,笔者谈谈对口增口减运算符的几点看法。一自增和自减运算符的作用和特点自增运算符(++)和自减运算符(一一)都是单目运算符,它们的作用分别是使操作数加1和减1,换句话说:X二x+1;同++x,X二X-1;同X,自增和自减运算符可用在操作数之前(前缀形式),也可放在操作数之后(后缀形式)。例如:“X二x+l「可写成“++x「或“x++「,“X二X-可写成“一一X;"或“X——但是表达式中这两种用法是有区别的,首先自增运算符和自减运算符在操作数之前(前缀形式)“++x,——X”:先使变量X的值加1或减1,再使用变量X的值。其次自增运

3、算符或自减运算符在操作数之后(后缀形式)“X++,X——先使用变量X的值,再使变量X的值加1或减lo在教学中我们应该注意以下儿点:(1)使运算对象的值在原来的基础上加1或减1是口增运算符和口减运算符的特点。所以口增或口减运算其实和赋值表达式的功能是一样的。(2)运算符两边的运算对象的数据类型可以是整型的,也可以是实型的,但不能是常量或表达式。所以++5、(a+b)一等都是不合法的。(3)表达式若是由自增或自减运算符构成的,它的运算符就可以出现在运算对象的前面,也可以出现在运算对象后面,也就是前缀和后缀形式都可以,对于运算对象而言,结果是一样的,但从表达式的角

4、度看,结果就是不一样的。(4)从优先级上來看,运算符“++”和“--”的结合方向是“从右到左”。假设有一表达式-a++,英中a的初始值为1,因为在运算符屮,就相当于-(a++)运算,结果为-1,然后a自增为2。二自增和自减运算符的结合性自增和自减运算符都是“从右到左”的结合方向,如果说a=3,那么计算:-計+,实际上就相当于计算-Q++)这个表达式,这时自增运算符“++”为后缀形式,(a++)的值为3,而-(a++)的值为-3,然后a的值自增为4。像这种简单的自增自减运算,我们按运算符的优先级和结合性处理还是比较容易解决的。若是遇到多个自增自减运算符连续出现

5、在表达式中的时候,结果就可能模棱两可,有时更是让人无法估测。下面让我们來看一个复杂一些的例子:例1:a+++++b的含义是什么?我们为了验证它的含义,编写了一个小程序:intmain(){inta=0;intb=0;intc二0;c=a+++++b;printf(“a+++++bTheresultis%cT,c);retum0;}左值就是可以在“二”左边,能被赋予值的东西;右值则是在“二”右边,可以赋值给别人的东西。所以左值必须是有内存空间的东西;而右值则既可以是变量,也可以是常量和某种表达式,只要能提供一个值即可。但这个程序是不能通过编译的,也就是说,尽管

6、我们可以正确地理解这个表达式,但在编译过程中会产生错误。为什么a+++++b会编译错误呢?第一,编译器在读入此语言时,遇到连续多个+,如+++++,自动识别位((++)++)+,即会++比+更优先识别。第二,++运算需要左值的。a+++++b等价于(("++)++)+b。a++没问题,但问题就在于d++却不能作为左值,即不能被赋予值,因为a++是先返回a的值进行运算,然后再对a的引用加1。然而a的值(value-a)是不能作为左值的。所示((a++)++)错误。++a为什么可以作为左值呢?原因在于++a是対a的引用加1,然后返回a的引用。a的引用当然可以作为

7、左值,被赋值了。c语言中的某些符号,例如:/、*和二,只有一个字符长,称为单字符符号。而c语言的其他符号,例如:+二和二二,以及标识符,包扌舌了多个字符,称为多字符符号。当C编译器读入一个字符/后乂跟了一个字符*,那么编译器就必须做出判断:是将其作为两个分别的符号对待,还是合起来作为一个符号对待。C语言对这个问题的解决方案可以归纳为一个很简单的规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可以组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的

8、组成部分;如果可能,继续读入下一个字符。重复上面的判

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。