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

程序设计中的运算符.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

运算符

在程序设计中,经常遇到‚i=i+1‛和‚i=i-1‛这两种极为常用的操

作。变量i被称为‚计数器‛,用来记录完成某一操作的次数。C语

言为这种计数器操作提供了两个更为简洁的运算符,即++和--,分别

叫做自增运算符和自减运算符。它们是从右向左结合的一元算术运算

符,优先级为2。学习和应用这两个运算符时应注意以下几点:

1注意表达式的值和变量值的区别

以自增运算符为例,当自增运算符++作用于一个变量时,例如:

当i=3时++i这个算术表达式的值为4,同时变量i的值也由原来的3

改变为4。一般情况下,计算表达式后不改变变量本身的值,而++运

算符和--运算符组成的表达式计算后,则改变变量的值,这称为运算

符的副作用。这类运算符在计算表达式时,一定要注意区分表达式的

值和变量的值。

2注意前缀运算和后缀运算的区别

仍以自增运算符为例,该运算符可作用在变量之前,例如前面所

讲的++i,称为前缀运算;也可作用在变量之后,例如i++,称为后

缀运算。在这两种运算中,表达式的值不同:前缀运算后,表达式的

值为原变量值加1;后缀运算后,表达式的值仍为原变量值;而变量

值不论前缀运算还是后缀运算都加1。自减运算符与自增运算符类似,

只要将加1改为减1即可。即前缀运算是‚先变后用‛,而后缀运算是

‚先用后变‛。

3注意运算符的运算对象

自增、自减运算符只能作用于变量,而不能作用于常量或表达式。

因为自增、自减运算符具有对运算量重新赋值的功能,而常量、表达

式无存储单元可言,当然不能做自增、自减运算。只要是标准类型的

变量,不管是整型、实型,还是字符型、枚举型都可以作为这两个运

算符的运算对象。如以下四个表达式都是合法的: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++‛,这是不

允许的。

4注意运算符的结合方向

表达式k=-i++等效于k=(-i)++还是k=-(i++)?因为负号运算符

和自增运算符优先级相同,哪一个正确就得看结合方向。自增、自减

运算符及负号运算符的结合方向是从右向左。因此,上式等效于

k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为

6。此赋值表达式的值即为所赋的值-5。不要因为k=-i++等效于

k=-(i++)就先做‚++‛运算!这里采用的是‚先用后变‛,即先拿出i

的值做负号‚-‛运算,把这个值赋给变量k之后变量i才自增。

5注意运算符的副作用

C语言允许在一个表达式中使用一个以上的赋值类运算,包括赋

值运算符、自增运算符、自减运算符等。这种灵活性使程序简洁,但

同时也会引起副作用。这种副作用主要表现在:使程序费解,并易于

发生误解或错误。例如,当i=3时,表达式(i++)+(i++)+(i++)的

为多少,各种教材说法不统一:有的认为是9(3+3+3,如谭浩强的《C

程序设计》,清华大学出版社,1991);也有的认为是12(3+4+5,如王

森的《C语言程序设计》,电子工业出版社,1995)。到底哪一个说法

正确呢?不妨看看下面这个程序的运行情况:

main()

{inti,j;

i=3;j=(i++)+(i++)+(i++);printf(‚\nj=%d,‛j);

i=3;printf(‚j=%d‛,(i++)+(i++)+(i++));

在TC3.0上运行,其结果则是:j=9,j=12,究其原因,‚先用后变,

先变后用‚中的‚先‛和‚后‛是一个模糊的概念,很难给出顺序或

时间上的准确定论。‚先‛到什么时候,‚后‛到什么程度?没有此方

面的详细资料可供查询。

为此,笔者用各种表达式上机测试,结果发现当表达式的值作为

printf函数的直接输出对象时,‚先变后用‛和‚先用后变‛中的‚后‛

就是指++i和i++这一小项运算完之后,如上面程序中最后一个语句

中的输出对象:第一

文档评论(0)

麒麟瑞兽 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档