【问题标题】:Usage of increment operators [duplicate]增量运算符的使用 [重复]
【发布时间】:2016-02-04 04:49:41
【问题描述】:
#include <stdio.h>
#include <string.h>

int main()
{
int i=3,y;
y=++i*++i*++i;
    printf("%d",y);
}

i 值最初递增到 4。然后它递增到 5。因此它递增到 6。因此结果应该是 216。但结果是 150。

【问题讨论】:

  • 确实应该是216.... 所以,也许问题不在代码中。尝试重建二进制文件,尝试不同的编译器(例如 g++ insted of gcc)
  • 关于序列点和未定义行为的 SO 上有很多帖子。查找它们。
  • no g++ 也给 150

标签: c


【解决方案1】:
  • 它将像这样执行;
  • 首先是这样考虑的,

    y = (++i * ++i) * ++i // so first i is incremented to 4 and again it will incremented to 5.
    
  • 所以现在第一个表达式将像这样执行

    y = (5 * 5) * ++i; 
    y = 25 * ++i;
    
  • 现在 i 再次递增到 6,最终表达式是这样的,

    y = 25 * 6;
    y = 150;
    

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2012-11-23
    • 1970-01-01
    • 2019-09-25
    • 2016-02-02
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多