兔子的洋葱圈 2024-11-03 22:32 采纳率: 0%
浏览 3

C语言打印自增的先后问题

C语言打印自增的先后问题
第一波打印为啥先5后4啊??
第三波打印为啥先1后2??

int main() {
    int i=4;
    printf("ok: %d %d\n", i++, i++);
    printf("ok: %d %d\n", ++i, ++i);
    printf("ok: %d %d\n", i++, i=1);
}
ok: 5 4
ok: 8 8
ok: 1 2
  • 写回答

1条回答 默认 最新

  • 香格里辣 2024-11-03 22:33
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题的原因在于 printf 函数的行为并不是按照我们预期的那样进行。当我们讨论到自增操作 i++ 时,其实这是一个后置自增操作,这意味着返回当前 i 的值之后再进行自增操作。所以在这个程序中发生的事情是这样的:

    1. 当你在 printf 函数中使用 i++,函数接收的是 i 的当前值,然后将它输出为 %d 的占位符所对应的参数,这个时候并没有真正改变 i 的值。接着由于这两个参数一起传递并分别赋值给了两个 %d 占位符,因此第二个 i++ 也获取了当前的 i 值。因此,在第一次打印时,第一个 %d 会输出当前的 i 值,也就是 4。之后在执行下一个操作前(也就是在格式化字符串完成赋值之后),会进行第一次的自增操作,使得 i 变为 5。然后在打印时第二次 %d 会打印这个已经自增后的值 5。所以你会看到输出结果是 ok: 4 5。这就是为什么你会看到先打印出 5 后打印出 4 的原因。这与函数的调用栈、局部变量等在背后共同作用的结果。对于C语言的这个行为特点应该牢记。不过通常不建议在一条语句中连续使用后置自增操作,因为这可能会导致混淆和误解。
    评论

报告相同问题?

问题事件

  • 修改了问题 11月3日
  • 创建了问题 11月3日