- 50
- 0
- 约3.96千字
- 约 6页
- 2017-02-28 发布于北京
- 举报
在DEV C++环境下C语言自加自减运算符使用分析.doc
在DEV C++环境下C语言自加自减运算符使用分析
摘要:针对C语言运算符使用规则,分析了在DEV C++环境下自加/自减运算符的使用方法和在复杂表达式中的求值情况分析,并针对问题给出了解决方案。
关键词:C语言;自增运算符;自减运算符
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)27-0248-02
Abstract:For the C language operators use rules, analysis of the add-self /sub-self and evaluation in the analysis of complex expressions with DEV C++, and the solutions were given.
Key words: C language;add-self;add-self
C语言是典型的结构化程序设计语言,在国内外得到了广泛的使用,也是各大学普遍开设的程序设计课程。在近年的教学过程中,大多借用C++的编辑环境编辑C程序,使用较多的有Visual C++,DEV C++等。在这些编辑环境下运行C程序,对于某些特定的操作,对不同的编译器可能会得到不同的运行结果。笔者发现,在C语言的运算符中,自加和自减运算符的使用非常灵活,是C语言的特色之一,但在使用过程中也比较容易出错。现就这两种运算符在DEV C++环境中的使用做一个详细的分析。
1 自加/自减运算符的使用方法及运算对象
自加自减运算符是C语言特有的单目运算符,只能和一个变量组成表达式,有前缀和后缀两种形式。前缀形式为:++操作数/- -操作数,后缀形式为操作数++/操作数- -。自加运算符可以使操作数的值增加1个单位,自减运算符可以使操作数的值减少1个单位。操作数只能是变量,不允许使用常量和表达式。比如i和j都是整型变量,使用i++,j++都是合法的,如果对常量3使用自加运算符即3++,则会使常量3的值增加1,这和常量在程序运行期间值不发生改变的定义相违背;而对表达式(i+2)使用自加运算符(i+2)++,则会使表达式(i+2)的值增加1,但是减少以后的值没有变量可以存储,因此这两种使用方法都不合法。
2 自加/自减运算符单独使用与在复合表达式中使用的区别
2.1 自加/自减运算符单独使用
以自加运算为例,使用整型变量i作为操作数,在运算符单独使用的情况下,有i++;和++i;两种形式,不论是用前缀表示还是后缀表示,都可以使i的值增加1,当然也可以使用赋值语句i=i+1;实现。但是,对于多数C的编译程序,利用自加/自减运算使变量增加/减少1和使用赋值语句相比,生成代码的运行速度会快很多,目标代码的效率更高一些。因此从效率上分析,前两种形式的效率更高。
2.2 自加/自减运算符在复合表达式中使用
同样以自加运算为例,使用整型变量i作为操作数,分析运算符在复合表达式中的使用情况。
(1)i=3;y=i++;printf(“i=%d,y=%d”,i,j);
(2)i=3;y= ++ i;printf(“i=%d,y=%d”,i,j);
在第一个程序段中,运行结果为i=4,y=3。说明在y=i++语句中,i先将增加前的值赋给y,在当前表达式计算完成之后才自己增加1,所以输出结果时,i的值是4,而y的值为3。
在第二个程序段中,运行结果为i=4,y=4。在y= ++ i语句中,i的值先增加1,再把增加后的值参与本表达式的运算,赋给y,所以i,y的值都为4。
通过以上两个程序段的分析,我们发现,当使用后缀表示时,变量i会先将自己的值赋给y,再对自己加1,而使用前缀表示时,变量i先自己增加1,再将增加后的值赋给y。可以将这两种情况总结为“变量在前就先使用,变量在后就先加”。
3 自加/自减运算符的优先级和结合方向
C语言规定,在表达式求值时,先看运算符的优先级,优先级高的先运算,对于同一优先级的运算符,则按照结合方向确定运算次序。自加/自减运算符是单目运算符,优先级仅次于括号等运算符,结合方向为自右向左。也就是说在出现多个同等级的运算符时,需要按照自右向左的方向运算。
比如表达式y=-i++,按照优先级分析,-和++运算符的优先级相同,赋值运算符优先级最低,因此先进行-和++运算,又因为他们的结合方向都是自右向左,因此变量i应该先进行自加运算再进行负号运算。这样该表达式就等价于y=-(i++),如果i的初值为3,则y的值就为-3。注意,这里使用的是后缀表示,所以应该先使用i的值再自加,所以y的值不是-4。
在另外一个表达式y=i+++j中,如果i的初值
您可能关注的文档
- 国内外风电产业现状及其发展前景.doc
- 国内孵化器之惑.doc
- 国内屋顶花园营造及管理的思考.doc
- 国内应用的掘进机机型分析.doc
- 国内智能变电站测控装置双重化配置方案的比较与探讨.doc
- 国内林业造林更新的现状及管理措施.doc
- 国内油气田开发分层注水工艺技术现状及趋势.doc
- 国内液晶显示面板行业发展中存在的问题及解决对策.doc
- 国内电动汽车发展现状及趋势分析.doc
- 国内翻车机技术发展与改造.doc
- 基于项目驱动的农业信息化课程设计与实施.docx
- 2026年凉州区洪祥镇公开选聘专业化管理的大学生村文书备考题库含答案详解.docx
- 2026年凉州区洪祥镇公开选聘专业化管理的大学生村文书备考题库及答案详解参考.docx
- 2026年凉州区洪祥镇公开选聘专业化管理的大学生村文书备考题库及完整答案详解一套.docx
- 2026年凉州区洪祥镇公开选聘专业化管理的大学生村文书备考题库及答案详解1套.docx
- 2025至2030特色旅游行业调研及市场前景预测评估报告.docx
- 2026年凉州区洪祥镇公开选聘专业化管理的大学生村文书备考题库及完整答案详解1套.docx
- 基于无人机测绘的建筑工程三维建模技术探讨.docx
- 2026年凌云航空招聘操作工备考题库及一套参考答案详解.docx
- 基于无人机测绘的建筑工程施工进度监测方法研究.docx
原创力文档

文档评论(0)