s=i+++x++;
编译器在读取源码的时候,是先一个一个的读字符,然后根据字符组成一个词,这个过程就是词法分析阶断,如 s = i+++x++;这样的代码,它会首先读取第一个+号,大多数编译器都是”贪心法“取字符,也就是不停的向后取字符,以便组成一个有意义的词。 所以它会继续第二个+,组成++运算符,所以实际的代码就是
s = i++ + x++;
我们知道,后++就是让原来值进行运算,执行完后再加1,所以s的值,实际上就是 s = i + x
#include
int main()
{
int x=1,i=5,s;
s=i+++x++;
/*
等价于 s = (i++) + (x++);
也就是
s = i + x; // i 和 x 值先用
i++; // 然后 i 自增
x++; // 然后 x 自增
*/
printf("x=%d i=%d s=%d\n",x,i,s);
}