c语言 求解惑

来源:百度知道 编辑:UC知道 时间:2024/06/24 13:12:07
main()
{
int a=012,b=012;
printf("%d,%d,%d,%d\n",a++,++a,--b,b--);
}
我分析下来的结果是11,11,9,10 可是程序运行的结果是11,11,8,10 求知道的说下为什么
书上给出的答案也是11,11,8,10求知道的人说明下

八进制012是十进制10,printf先执行右边,b--先返回b的值,再自己减1,--b先自己减1,再返回b的值,a的相同。

很黄很暴力的副作用,
结果直接与编译器对函数的参数处理有关
如果编译器是从左处理参数,那结果是
10,12,9,9
如果编译器是从右处理参数,那结果是
11,11,8,10
很明显你用的编译器采取的是第二种处理函数参数的方式
以这样的顺序计算,你应该能明白为什么是那个结果
1. b-- 取当前b值10然后 b递减为9
2. --b b先递减为8 然后取当前值8
3. ++a a递增为11, 然后取当前值11
4. a++ 取但前值11,然后递减为10
把他们的结果对号入座
另外你注意你的定义中a,b都是8进制.而%d转换成的是 10进制

不如把它分开写吧。
貌似是编译器的问题。
如果正常的显示结果是10,12,9,9才对的

题貌似出错了吧