这程序的结果是什么?

#include <stdio.h>
 
int main() {
    int i = 3;
    int r = (i++*++i+i--*--i);
    printf("The answer : %d\n", r);
    system("pause");
    return 0;
}

最佳答案
本回答由提问者推荐

262662002 8级
2010-04-29 回答

你这属于未定义(undefined)行为,因为C++标准中没有定义i++*++i+i--*--i这条语句的执行顺序,不能确定i是何时自增的,所以编译器会根据自己的喜好来执行,不同的编译器会有不同的执行结果。

这段程序的本意应该是5*4+4*3最后结果为32,但在VC++2008中,他的结果为18,他的编译方式是这样执行的,3*3+3*3。而在VC++6.0中,他的结果为25,他的执行方式为4*4+3*3。

未定义行为编译器是不会报错的,但会给执行结果造成很多莫名其妙的问题,所以写程序的时候不要这样写。一般带有自增或自减运算的程序什么其他的都不要写,就把自增自减写成一条语句就可以了。

要说明的是,很多教科书上都有这种例子,不要较真。而如果有公司面试的时候出这种题,那么这公司不去也罢。

最新回答 (1条回答)

2010-04-29 回答
25