自增运算符问题
下面代码运行后是9,不应该是8吗{:9_233:}#include <stdio.h>
int main(){
int a = 3;
a = ++a+a++;
printf("%d\n", a);
return 0;
} 这里有两个自增操作:前缀自增(++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。但是请注意,这是特定编译器的行为,并非所有编译器都会产生相同的结果。最好避免在同一表达式中使用多个自增操作,以免出现未定义行为。 a = ++a+a++;
研究这东西对编程功力的提升 没有任何用处 存粹的旁门左道
页:
[1]