int x=1,y;
y=++x*++x;
为什么算来的y=9而不是6
还望采纳:
在C语言中,前置 ++ 运算符会先将变量的值加 1,然后再返回该变量的值。
因此,在上述代码中,x 先加 1 变为 2,然后再加 1 变为 3,而不是先加 1 变为 2,再乘 2 得到 4。
所以 y 的值为 3 * 3 = 9。
这个与环境和编译器都有关系,在VC6.0中结果是6,2 * 3,在vs中结果是9,3 * 3
因为++x先将x加1,再进行运算。所以,第一次计算++x时,x=2,第二次计算++x时,x=3,因此,y = 3 * 3 = 9。
这是个典型的优先级问题
++的优先级比乘法优先级高,所以会先算两个++x,再算乘法,最后赋值
按你的想法,++优先级必须和乘法优先级一样才行
那句代码相当于(++x) * (++x),所以会先算两边的,虽然左边的时候为2,但是到右边就是3,最后把两个相乘就得到3*3
因为先对变量 x 进行自增,再计算它的值。
所以,先将 x 的值从 1 变成 2,然后再将 x 再次自增,使其变为 3。因此,y = (++x) * (++x) = 3 * 3 = 9。