- 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语言教学中关于自加运算符理解误区 摘要:C语言教学过程中普遍存在一个对C语言中自加运算符的错误认识,根据C99规范对该错误进行详细分析,指出后缀加运算符与前缀加运算符的本质区别,解释C语言中令人颇难理解的一个特性。
关键词:C语言;自加运算;后缀加;前缀加;优先级
文章编号:1672-5913(2013)03-0026-03
中图分类号:G642
随着计算机教育的普及,C语言已经成为各所高校理工科专业的必修课程。由于C语言本身是为熟练程序员准备的程序设计语言,使用非常灵活,但同时又极容易出错,因此对教学者提出了更高的要求。
笔者在10多年的教学过程中,发现自己对C语言的某些知识理解是错误的;在与同行交流时,也发现某些同行由于缺乏实际的编程经验,犯下一些知识性的错误。目前使用c语言容易犯的错误已高达100多种,其中有一个对自加运算符的理解错误最为普遍,流传甚广,却至今无人明确提出,笔者拟对此作出澄清。
1 关于后缀自加的一个主流观点
自加运算符(++)是C语言中使用最普遍的一个运算符(由于自减运算符存在的问题与自加完全相同,下面只谈自加运算符),它分为前缀加和后缀加两种。其中前缀加的运算规则相对比较简单,一般均可正确理解。但后缀加的运算规则理解起来要困难得多,笔者发现不少同仁均在此处犯错,且极不容易发现。
在我国高校中使用最广泛的C语言教材是谭浩强先生的《C语言程序设计》,至2009年,该书已经再版3次,发行量超过1000万册,可谓影响深远。该书在介绍自加运算符时,先是如此说明:
++i,--i(在使用i之前,先使i的值加或减1)
i++,i--(在使用i之后,使i的值加或减1)
并补充解释到:“但++i和i++的不同之处在于++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1”。随后举了一个程序例子:
i=3:
j=++i;//j的值为4
i=3;
j=i++;//j的值为3,然后i变为4
在程序之后,作者又补充到:“注意(i++)是先用i的原值进行运算以后,再对i加1”。从上述描述不难看出,谭浩强先生对于“j=i++”执行的过程可以理解为下面两步操作:
i→j
i+1→i
从中可以看出,后缀加的运算优先级比赋值号的优先级更低。该观点在随后的两个版本中虽然描述文字有所出入,但基本思想一直保留。谭浩强先生的这一观点受到普遍认同,笔者随机找到10余种C语言程序设计书籍,均同意这一观点。虽然各书所举的例子不尽相同,但都能印证这一解释的正确性。于是这一解释成为目前C语言教学中的主流观点,笔者曾不止一次听到在课堂教学中老师将这一解释介绍给学生,并将其简单总结为:“前缀加是在其他操作之前加1,后缀加是在赋值操作之后加1”。
2 无法解释的矛盾
上述观点在仅有算术运算的情况下能够正确解释程序运行的结果,再加上谭浩强先生的权威,因此成为了主流观点。但实际上,这一观点有一个重大的漏洞。按照该观点,前缀加和后缀加必须是两个运算符,其中前缀加的优先级高于赋值运算,而后缀加的优先级则低于赋值运算。而所有的C语言教材都承认,自加运算符的优先级只有一个,位于所有运算符中的第二级。这一规定是由ISO/IEC组织在《ISO/ICE 9899:1999,C programming language standard》(以下简称C99标准)中规定,教材作者无权更改。
为解决这一矛盾,明确提出:“把前缀自增(自减)和后缀自增(自减)运算符看成两种运算符,且规定前缀自增(自减)运算符的优先级大于算术运算符,后缀自增(自减)运算符的优先级低于赋值运算符”,即需要修改C99标准。
暂且不提修改C99标准这一愿望是否能实现,即便修改了C99标准暂时解决这一矛盾,但由于这一观点的内涵是错误的,必将会在其他方面暴露出来,下面看一个程序段:
int a[2]={1,2},t;
int*p=a;
t=*p++;
printf(”t=%d,a[0]=%d,a[0]=%p,a[1]=%p,p=%p”,t,a[0],a[0],a[1],p);
按照前述“后缀加运算优先级低于赋值号”的观点C99标准中自加运算符位于所有运算符中第二级的规定,该程序的第4行应该这么来理解:“*”的优先级最高,它和p结合,于是将p所指向的存储单元内容(a[0]的值,等于1)赋值给t;然后执行后缀加运算,由于后缀加的优先级低于“*”,因此运算数p应先执行“*”运算后,得到的后果再执行后缀加运算。于是后缀加运算是将p所指向的存储单元(即a[0])的值加1,而p里面存储的地址值不发生变化,还是a[0]的地址值。依
您可能关注的文档
最近下载
- 急救与心理技能(视频课)知到课后答案智慧树章节测试答案2025年春中南大学.docx VIP
- 应急救援员国家职业技能标准(2019年版).pdf VIP
- 场地设计作图题-一级建筑师场地设计(作图题)真题精选.docx VIP
- 小学环境教育:校园内水体污染调查与水质保护实践教学研究课题报告.docx
- 阿迪达斯(Adidas)品牌现状分析与二次增长战略规划.pptx
- 人教版七年级上册数学一元一次方程计算题及应用题.docx VIP
- 人教版2025八年级上册英语Unit3 same or different单元复习课件.pptx VIP
- 濒危古树评估与抢救保护技术规程.docx VIP
- 大麦EK318.操作手册.C01.220905.pdf
- 高速公路匝道桥单箱双室现浇箱梁施工方案.doc
文档评论(0)