++a*++a*++a 这个怎么运算?
为什么这么算啊?
a = 1;
c = ++a*++a*++a;
c的结果是多少。
我一直以为是:64
我在vc的环境下的出的结果是:36
++和*的运算顺序是怎么弄的。
[解决办法]
视编译器而定
无任何研究价值!
[解决办法]
#include <stdio.h>int main(){ int a=1; int c=0; int d; c=++a*(++a); //a的值为3 d=c*(++a); //a的值为4 printf("%d\n",d);return 0;}
[解决办法]
先自增两次做乘法运算,得出的积再与a的第三次自增值做乘法。
3*3*4=36
仅仅指vc是这样实现的,与编译器有关。
[解决办法]
我想到了一种可能
*
/ \
* ++ a
/ \
++a ++a
为了保证优先级和结合性
只能从左以及下开始向右以及上方向做
这样前两个++优先级最高
第一个*与第三个++同级
最后一个*优先级最低
声明:
我只是在猜测编译器如何分析表达式的可能性
而编译器如何分析表达式既不是c的范畴也不是c++的范畴
这个表达式的结果可以为64或24
都不违背c或c++的定义
[解决办法]
a = 1 ;
c = ++a*++a*++a =
(++a)*(++a)*(++a) //二叉樹解析為:表達式1*表達式2*表達式3
= 2*3*4 = 24 ;
= (++a * ++a) * (++a) //解析為:表達式1*表達式2
= 3*3*4 = 36 ;
= ++a*++a*++a //解析為:一體化表達式 a*a*a
= 4*4*4 = 64 ;
前綴++,規定變量要先於表達式計算,但並沒有規定表達式如何拆分。
最不同意就是VC這種方案,24或64都較理解,就是36這種方式不易理解。