++a*++a*++a 这个怎么运算?
为什么这么算啊?
a = 1;
c = ++a*++a*++a;
c的结果是多少。
我一直以为是:64
我在vc的环境下的出的结果是:36
++和*的运算顺序是怎么弄的。
[解决办法]
视编译器而定
无任何研究价值!
[解决办法]
- C/C++ code
#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方式不易理解。