ch04-表达式精选.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.3 自增和自减运算符 自增(加1)和自减(减1): i i + 1; j j - 1; 用复合运算符可以简化为: i + 1; j - 1; C提供了更简化的 ++(自增)和--(自减)运算符 ++和- -运算符可以作为前缀(++i和--i)使用,也可以作为后缀使用( i++和i--) 自增和自减运算符 前缀会自增和自减变量本身: i 1; printf i is %d\n, ++i ; /* i is 2 */ printf i is %d\n, i ; /* i is 2 */ i 1; printf i is %d\n, --i ; /* i is 0 */ printf i is %d\n, i ; /* i is 0 */ 后缀是变量先不变,但随后自增和自减该变量: i 1; printf i is %d\n, i ++ ; /* i is 1 */ printf i is %d\n, i ; /* i is 2 */ i 1; printf i is %d\n, i -- ; /* i is 1 */ printf i is %d\n, i ; /* i is 0 */ 自增和自减运算符 同一个表达式中多次使用 ++ 或 – 结果难理解: i 1; j 2; k ++i + j++; i,j,k的值为2,3,4。 例子: i 1; j 2; k i++ + j++; i,j,k的值为2,3,3。 4.4 表达式求值 右结合 * / % + - 赋值 5 左结合 + - 加法类 4 左结合 * / % 乘法类 3 - 一元负号 + 一元正号 -- (前缀)自减 右结合 ++ (前缀)自增 2 -- (后缀)自减 左结合 ++ (后缀)自增 1 结合性 符号 名称 优先级 表达式求值(P43) 例子: 优先级 a b + c++ - d + --e / -f a b + c++ - d + --e / -f 1 a b + c++ - d + --e / -f 2 a b + c++ - d + --e / -f 3 a b + c++ - d + --e / -f 4 a b + c++ - d + --e / -f 5 子表达式的求值顺序 有了运算符的优先级和结合性规则我们可以把复杂表达式分解为子表达式。 C语言没有定义表达式的求值顺序(除了含有逻辑与和逻辑或运算符、条件运算符、逗号运算符的子表达式)。 表达式 a + b * c - d 无法确定 a + b 是否在 c - d 之前求值。 Copyright ? 2008 W. W. Norton Company. All rights reserved. * 子表达式的求值顺序 无论表达式的计算顺序如何,大多数表达式的值是相同的。 但当子表达式改变了某个操作数的值时,产生的值可能不一致: a 5; c b a + 2 - a 1 ; 先执行b a+2,则b的值为7,C的值为6。 先执行a 1,则b的值为3,C的值为2。 语句2的执行效果未定义。 对这种情况,有些编译器会产生“operation on ‘a’ may be undefined” 的警告信息。 子表达式的求值顺序 为了避免此类问题,不在子表达式中使用赋值运算符,而是采用分离的赋值表达式: a 5; b a + 2; a 1; c b - a; 自增自减也可以改变操作数: i 2; j i * i++; 结果未定义,可能是4或6: 1 取出第二个i,再自增;2 取出第一个i 新值 ;3 i的原始值和新值相乘,结果为6。 未定义行为 未定义行为 undefined behavior ,和前面讲的由实现定义的行为不同。 其后果是严重的: 不同的编译器给出的编译结果不同。 程序可能无法编译。 或编译了无法运行,运行了可能崩溃,不稳定或产生无意义结果。 应该避免未定义行为。 4.5 表达式语句 C语言规定任何表达式都可以用作语句(加分号) ++i; i自增,然后把新值取出,但++i会被丢掉。 因为会丢掉新值,除非有副作用,否则表达式用作语句就没有意义: i 1; /* useful */ i--; /* useful */ i * j - 1; /* not useful */ Copyright ? 2008 W. W. Norton Company. All rights reserved. * 表达式语句 键盘上的误操作容易造成“什么

文档评论(0)

贪玩蓝月 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档