一颗蛋糕树 发表于 2023-3-23 13:51:32

自增运算符问题

下面代码运行后是9,不应该是8吗{:9_233:}

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

isdkz 发表于 2023-3-23 13:54:37

这里有两个自增操作:前缀自增(++a)和后缀自增(a++)。它们的行为略有不同:

前缀自增(++a):首先增加 a 的值,然后返回新的值。
后缀自增(a++):返回 a 的当前值,然后增加 a 的值。
这段代码中,a = ++a + a++; 表达式涉及到这两种自增操作。按照 C 语言的运算符优先级,表达式从左到右求值。但是,C 语言规定,在同一表达式中,自增或自减操作的顺序是未定义的。这意味着,这段代码的行为依赖于具体的编译器实现,可能会有不同的结果。

然而,在很多编译器中,你可能会得到 9 作为结果,原因是这样的:

1、++a:将 a 的值加 1,使其变为 4。返回新值 4。
2、a++:返回 a 的当前值(4),然后将 a 的值加 1,使其变为 5。
3、计算 4 + 4,结果是 8。
4、将结果 8 赋值给 a,但此时要记住 a++ 操作尚未执行,现在执行它,将 a 的值加 1,使其变为 9。

所以,最终输出是 9。但是请注意,这是特定编译器的行为,并非所有编译器都会产生相同的结果。最好避免在同一表达式中使用多个自增操作,以免出现未定义行为。

wp231957 发表于 2023-3-23 15:18:44

a = ++a+a++;
研究这东西对编程功力的提升 没有任何用处   存粹的旁门左道
页: [1]
查看完整版本: 自增运算符问题