a = 8; i = 4;
a = i++(=1) * i++(=2) * ++i(4);
++ 在后时时先取值后进行加一。 ++在前时时先进行加1然后在取值。
当第一个和第二个I++时,是先取值后增加, 所以第一个i++ 取值为1, 第二个取第一个加一后的值为2, 第三个取二个++后的值3,然后在自加1等于4
int a,i=1;//a随机值没有进行初始化,i复制初始化为1
a=i++*i++*++i;//运算符结合优先级:++(后自增)>++(前自增)>*(解引用)>*(乘)
//等价
a=((i++)*(i++))*(++i);//(1*i++)*(++i)此时i=2;(1*2)*(++i)此时i=3;1*2*4=8
//a=8; i=4
a=8,i=4。如下:i初值为1,当求a时,有++和*两种运算,a = 2*2*2 = 8;而i因为自增3次,所以i增加到4.
a=i++*i++*++i;
*乘法运算符优先级高于后++运算符。先计算第一个被乘数i++, 第一个被乘数值为1,然后i加1,值为2;然后计算乘数(即第二个i++),乘数值为2,然后i再加1,值为3;
此时第一个被乘数(1)与第二个乘数(2)均计算出,需要计算1*2的乘机,结果为2.
然后计算第三个乘数,就是最后一个++i,前++运算符优先级高于*乘法运算符,因此i先自加1,值为4,所以第三个乘数值为4。
此时将前面1和2的乘机结果2跟第三个乘数4相乘作为整个表达式的结果,2*4 为8.
从前面的分析可知,此时i为4.
所以答案是,a为8,i为4.