C语言解惑之逻辑操作符和增量操作符

对于

以上这些只要考虑到操作符的优化级和关联规则,还有以前提到过的贪心法(大嘴法)就可以得出结果了。同贪心法的知识,请参考:C语言陷阱与缺陷之词法分析中的“贪心法”

我们重点研究一下z = x / ++x这个语句。

(z = (x / (++ x)))

如果你还像以前那样按照从内到外的顺序对这个表达式进行求值,即先对x进行递增,然后作为除数、用x作被除数去进行除法计算。问题是:作为被除数的x到底是几?是3还是4?换个问法,被除数到底是递增前的x值,还是递增后的x值?请注意,C语言并没有对这种“副作用”作出明确的规定,而是由C编译器的编写者决定的。这个例子的教训是:如果你无法断定会不会产生副作用,那么就尽量不要写这样的表达式。

未经允许不得转载:TacuLee » C语言解惑之逻辑操作符和增量操作符

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址