大家看看下面的代码在VC的编译下的结果是什么 :)#include<stdio.h>
void main(){
int i=0;
int t=0;
int p=0; 

t=(--i)+(--i)+(--i);

printf("%d\n",t);

i=0;
p =(++i)+(--i)+(++i)+(--i);

printf("%d\n",p);
i=0;
p =(++i)+(--i)+(--i)+(++i);

printf("%d\n",p);
i=0;
p =(--i)+(--i)+(++i)+(++i);

printf("%d\n",p);
i=0;

p =(++i)+(++i)+(--i)+(--i);

printf("%d\n",p);

}呵呵你会看到好有趣的结果,希望大家能分析出来VC的编译器是怎么分析以上的表达式的 :)

解决方案 »

  1.   

    这个好象没有什么特别的吧,他的连加就是先将前两个数相加然后进行赋值,以后再一个一个往上加,最后得到结果。比如t=(--i)+(--i)+(--i);就是t=(--i)+(--i);t+=(--i);前面加的结果是-4,而后面加上-3,所以得到-7,其他的相同推理。
      

  2.   

    楼主的研究精神是值得学习的.
    你最好再在borland c++ 下执行以下,看看是否一样.
      

  3.   

    谢谢,大家的参与,这个问题是因编译器的不同而不同的,在TC中的值和VC中的值是不一样的
    在VC中是用的算符优先文法分析表达式的,表现的形式是先算前两个然后再按通常的方式进行计算,在TC中是把i值做引用这样一来 设i=0 ;t=(++i)+(++i)+(++i);等于9,在VC中就为7。
    对与VC我能算出正确的表达式值但是并不知道他的分析方法到底是不是像我说的那样,如果大家知道的话希望继续讨论;
        呵呵,真理越辩越明嘛!
        :)