【问题标题】:Hierarchy of arithmetic operations in C. [duplicate]C中算术运算的层次结构。 [重复]
【发布时间】:2013-06-27 02:14:26
【问题描述】:

当我输入如下代码时:

int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);

它给了我一个类似c =10d= 12e=13的输出 当我们添加这些值时,即10+12+13变成35, 但是当我像这样编码时:

b = a++ + ++a + ++a;
printf("value of b=%d" ,b);

它给了我输出36

有人能描述一下这段代码背后的过程以及为什么代码的输出不同吗? 谢谢!

【问题讨论】:

标签: c hierarchy


【解决方案1】:
int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);

在语句c = a++ 中,首先使用a 的值(即10),然后递增到11
语句d = ++a首先递增a(现在是12),然后在printf()语句中使用其值打印。
e = ++a 也一样。

你的第二个sn-p

b = a++ + ++a + ++a;
printf("value of b=%d" ,b);

导致未定义行为(http://en.wikipedia.org/wiki/Undefined_behavior)

【讨论】:

  • 感谢您澄清所有事情.....您的回答也是正确的。
  • 很高兴它对您有所帮助。请参阅常见问题解答stackoverflow.com/about
【解决方案2】:

美味的Undefined Behaviour+(和许多其他)的操作数的评估顺序留给实现。因此,对于第二种情况,36 并不总是如此。

【讨论】:

    【解决方案3】:

    它们之间的区别在于第二个表达式没有以 a++ 结尾,还添加了一些其他值,这就是为什么 a++ 是 11,而不是 10

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2020-09-14
      • 1970-01-01
      • 2021-11-05
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多