【问题标题】:Why does the value of i not increment for i=i++; statement? [duplicate]为什么 i=i++ 的 i 值不增加;陈述? [复制]
【发布时间】:2020-11-25 09:43:35
【问题描述】:

代码:

for(int i=0;i<5;){
  i=i++;
  printf("%d",i);
}

上面的程序无限打印零,怎么可能呢? 有声明i=i++;。请解释为什么i 的值不增加。

【问题讨论】:

标签: c post-increment language-concepts


【解决方案1】:

i = i++ 语句在 C 中是未定义的行为。简单地说,修改和使用同一个对象而没有插入序列点不能保证以您期望的任何方式工作。

如果您对深入调查感兴趣,ISO C 标准的附录 C 中介绍了序列点。基本上,它们包括:

  • 在函数调用和实际调用中函数指示符和实际参数的评估之间。
  • 在以下运算符的第一个和第二个操作数的计算之间:逻辑与&amp;&amp;;逻辑或||;逗号,
  • 在条件 ?: 运算符的第一个操作数的计算与第二个和第三个操作数中的任何一个计算之间。
  • 完整声明符的结尾。
  • 在完整表达式的计算与要计算的下一个完整表达式之间。以下是完整的表达式: 不属于复合字面量的初始化器;表达式语句中的表达式;选择语句的控制表达式(ifswitch); whiledo 语句的控制表达式;每个(可选) for 语句的表达式; return 中的(可选)表达式 声明。
  • 就在库函数返回之前。
  • 在与每个格式化输入/输出函数转换说明符关联的操作之后。
  • 在每次调用比较函数之前和之后,以及在对比较函数的任何调用与作为参数传递给该调用的对象的任何移动之间。

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多