C语言,高手来,在线等,谢谢

[复制链接]
查看11 | 回复3 | 2008-1-12 02:24:07 | 显示全部楼层 |阅读模式
一样都是0
回复

使用道具 举报

千问 | 2008-1-12 02:24:07 | 显示全部楼层
结果都一样 都是0i---i 相当于 (i--)-i
回复

使用道具 举报

千问 | 2008-1-12 02:24:07 | 显示全部楼层
0,0但是有些编译器不按照iso的标准了,不用管。
回复

使用道具 举报

千问 | 2008-1-12 02:24:07 | 显示全部楼层
子表达式i-- 有一个副作用—它会改变i 的值—由于i 在同一表达式的其它地方被引用, 这会导致无定义的结果, 无从判断该引用是旧值还是新值。尽管后缀自加和后缀自减操作符++ 和-- 在输出其旧值之后才会执行运算,但这里的“之后”常常被误解。没有任何保证确保自增或自减会在输出变量原值之后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表达式“完成” (按照ANSI C 的术语, 在下一个“序列点” 之前) 之前的某个时刻进行。包含多个不确定的副作用的代码的行为总是被认为未定义。 对于i---i,到底是分解成i-(--i),还是(i--)-i?C语言通过使用一种称之为贪婪准则的机制,即按照表达式的求值顺序,对变量及其操作符取最长可能的组合,所以这里取第二个分解方式。它们的执行结果是一样的,都为0,但是推荐使用第二种方式在printf("%d",i---i),编译器不保证第一个i先被求值。就像s=f1()+f2()一样,编译器不保证f1()函数先于f2()执行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行