【问题标题】:Post/pre increments in 'printf' [duplicate]'printf'中的后/前增量[重复]
【发布时间】:2011-06-10 00:51:08
【问题描述】:

可能的重复:
Output of multiple post and pre increments in one statement
Post-increment and pre-increment in 'for' loop

以下代码sn-p

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

给出输出

1 0

我可以理解,但是下面

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

给出输出

2 2

谁能解释一下第二种行为?

【问题讨论】:

标签: c++ c operator-precedence


【解决方案1】:

两个 printfs 都调用未定义行为。看到这个:Undefined behavior and sequence points

引用自此链接:

简而言之,未定义的行为意味着 任何事情都可能发生在守护进程中 从你的鼻子飞到你的 女朋友怀孕了。

对于新手:永远不要尝试在函数调用参数列表中修改变量的值两次或更多。有关详细信息,请click here 了解它的含义。 :-)

【讨论】:

    【解决方案2】:

    它们都是未定义的行为。多次修改变量i 是未定义的。另外,C++ 还是 C?您需要下定决心,因为我认为它们之间的预增量行为是不同的。

    【讨论】:

      【解决方案3】:

      您得到了所谓的“未定义行为”,因为您在序列点之间多次更改同一个变量。另一个编译器可以给你不同的结果。

      【讨论】:

        猜你喜欢
        • 2014-12-09
        • 2019-03-27
        • 2015-12-21
        • 2012-10-03
        • 2016-07-08
        • 2015-05-21
        • 2016-02-02
        • 1970-01-01
        • 2017-04-30
        相关资源
        最近更新 更多