给你讲一下程序1的输出结果怎么来的,其他的可以自己分析。 int i=100; printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--); 1 2 3 4 VC++的printf语句是从右向左扫描参数的。在上面的输出语句中 (1)编译器首先扫描第四个参数i--,i本来的值是100,所以第四个%d输出100,--操作不会马上被执行,要等printf语句执行完后才执行,此时i的值仍是100。 (2)然后扫描第三个参数i++,同样输出100,,++也操作不会马上被执行,要等printf语句执行完后才执行,i的值仍是100 (3)接着扫描第二个参数--i,--i被马上执行,i的值变成99,然后被输出。 (4)扫描第一个参数++i,++i被马上执行,i的值变成100,然后输出。 (5)printf语句执行结束,i执行刚才没有被马上执行的--操作,i的值变为99 (6)--操作执行结束,i执行刚才没有被马上执行的++操作,i的值又变回100。 所以如果你在程序1的printf语句下面再加一句printf语句输出i的值,会发现i的值仍然是100;而如果你在程序2的printf语句下面加一句printf语句输出i的值,会发现i的值变成了101;如果你在程序3的printf语句下面加一句printf语句输出i的值,会发现i的值变成了99!说得够明白了吧,自己去试一下?