请高手回答一道基础的c语言题

来源:百度知道 编辑:UC知道 时间:2024/06/03 19:10:38
void main(void)
{ int x = 5;
int m, n;
n = (++x) + (++x);
m = (x--) + (x--);
printf("%d %d\n", n);
}
我感觉结果应该是 13 13,,但vc给出的运行结果是14 14,,
哪位高手知道原因啊???

研究此问题无意义,编译器的规则而已。

首先,后面一个怎么可能是13,在运算n的时候,x自加两次,为7,
m=(x--) + (x--); 就是7+7当然为14 (x--的值不变)

我用程序检测了一下,n = (++x) + (++x) 为14 6+8
n = (++x)+(++x)+(++x) 22 6+8+8
n = (++x)+(++x)+(++x)+(++x) 31 6+8+8+9
n = (++x)+(++x)+(++x)+(++x)+(++x) 41 6+8+8+9+10
所以光说++x的优先级高也不对

n = (++x) + (++x);
因为自加的优先级比+号要高,做了两次自加x的值为7,再做n=7+7=14,输出n的值为14;
m = (x--) + (x--);
因为是后自减运算,先取值再自减,所以先做m=7+7=14后,x再自减两次为5

所以输出为14 14

printf("%d %d\n", n);
怎么才输出一个??
着不肯定错嘛!

++x是前置运算,即运算后立即生效,所以,n=(7)+(7)之所以为7是因为两个++同时运算,x--是后置运算,即在下次计算才生效,说m=(7(i=5))+(7(i=5))

吴钩 说的对,这是没有意义的,有这功夫看点别的吧