在一个表达式中,无论i++和++i出现的次数,顺序如何,也无论+-*/的混合运算如何,都遵循如下规则:
1. 所有的i++和++i的值都相等为A。
2. A等于执行所有++i后,i的值。
原因是编译如此工作:
1.找到所有的++i,执行
2然后找到所有的i++,执行
3计算表达式。
int i = 3;
int i,a;
i=3;
a = (++i)+(i++)+(++i)+(i++); 5+5+5+5=20
printf("a=%d /n",a);
i=3;
a = (i++)+(++i)+(i++); 4+4+4=12
printf("a=%d /n",a);
i=3;
a = (++i)*(i++)*(++i); 5*5*5=125
printf("a=%d /n",a);
i=3;
a = (i++)+(++i); 4+4=16
printf("a=%d /n",a);
i=3;
a = (++i)+(i++)*(++i)*(i++)*(i++);5+5*5*5*5=630
printf("a=%d /n",a);
以上程序在vs2008,控制台程序中经过验证。