【问题标题】:Confusion with i++ and i=i+1与 i++ 和 i=i+1 混淆
【发布时间】:2018-07-26 15:07:29
【问题描述】:

请帮我解释我的代码的输出。目前我是 C 的业余爱好者。如果 i++i=i+1 是相同的东西,那么为什么输出会有这样的差异?

#include <stdio.h>
void main()
{
int i=0;
printf("%d %d %d \n",i++,i,i++);
int j=0;
printf("%d %d %d \n",j=j+1,j,j=j+1);
return 0;
}

输出:

1 2 0
2 2 2

Process returned 7 (0x7)   execution time : 0.081 s
Press any key to continue.

【问题讨论】:

    标签: c operators


    【解决方案1】:

    要了解输出背后的逻辑,您需要了解 Pointer 及其工作原理。

    C 语言表现出未定义的行为 (https://en.wikipedia.org/wiki/Undefined_behavior),您无法预测语法在执行时的工作方式。

    i++ -> 增加 i,但返回 i 的前一个值。 ++i-> 递增 i,并在赋值后返回 i 的新值。 i = i + 1 -> i加1,写入i,赋值后返回i的新值。

    更多信息请参考此链接:https://en.wikipedia.org/wiki/Sequence_point

    基于这个原理,输出可以分析如下。

    int i=0;
    printf("%d %d %d \n",i++,i,i++);
    

    首先,i=0 它从右侧开始执行 i++ 首先,它赋值&指针存储0;然后增量将发生。所以,i=1。

    在下一步中,只有一个变量。因此,指针不存储值;它只存储地址。因此,i=1。

    最后一步执行与第一步相同。所以,i=2。

    现在,它将打印存储的值。所以,输出是 1 2 0。

    现在,让我们分析第二个 OUTPUT。

    在第二个输出中,表达式是 j=j+1。 因此,首先,它执行所有步骤,然后打印值。 所以,第二个输出是 2 2 2。

    我希望你现在明白 i++ 和 i=i+1 之间的区别。

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 2021-02-10
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多