C问题,高分悬赏

来源:百度知道 编辑:UC知道 时间:2024/05/17 06:09:04
当a被赋值后,printf("%d %d %d %d %d %d %d %d %d \n", ++a,a, a, a++, a, a--, a, --a,a);怎么解释?

比如a=1;为什么输出 1 0 0 0 0 0 0 0 1?

多谢大家了

楼上的我晕了你!

首先,我想说楼主的“比如a=1;为什么输出 1 0 0 0 0 0 0 0 1?”是错的,我一看就知道了,后来自己调试了一下果然如此,应该是输出:
1 0 0 -1 -1 0 0 0 1 不信你自己试一下

下面我具体解释一下,其实这是很基础的C问题。

1、a++表示在用a的值时先用后自加。
举例:int a=1;b=a++;这里的“用a的值”具体就是指用a赋值给b,那么a++是先用后自加,也就是先把a的值1赋给b,然后a自加,本表达式完结后b为1,a为2

2、++a表示在用a的值时先自加后用。
举例:int a=1;b=++a;这里的“用a的值”具体就是指用a赋值给b,那么++a是先自加后用,也就是先a自加,a的值变为2,然后把a的值2赋给b,本表达式完结后b为2,a为2

3、printf函数它的参数读取是从右边开始的(注意!这很重要),举例说明你就明白了。
int a=1;
printf("%d %d",a++,a);
printf先输出最右边的a,也就是第二个%d对应的输出是1,然后从右往左,就是看a++,先用后加嘛,那就是先输出a的值1,a再自加变为2。
结果:输出1 1 a的值变为2

现在做你那题:
int a=1;
printf("%d %d %d %d %d %d %d %d %d \n", ++a,a, a, a++, a, a--, a, --a,a);

从最右边开始,输出a值1也就是最右边的%d对应1,

然后从右往左(注意!),是--a,那么是先自减后用,也就是说a变为0,然后输出a也就是0,即从右往左倒数第二个%d对应0

然后过来是a,那么输出0,

然后过来是a--,先用后自减,那么先输出0,然后a变为-1,

然后是a,那么输出-1,

然后是a++,那么先输出a即-1,a再自加变为0

然后是a,那么输