请问下面这段C语言的输入结果是怎么得出的?

来源:百度知道 编辑:UC知道 时间:2024/05/27 00:10:11
#include <stdio.h>

int a();

int b();

int main(void)
{
a();
printf("\n");
b();
}

int a()
{
int x,y,z;
x = y = 2; z = 3;
y =x++ -1; printf("%d\t %d\t",x,y);
y =++x-1; printf("%d\t%d\t",x,y);
y =z-- +1; printf("%d\t%d\t",z,y);
y =--z+1; printf("%d\t%d\n",z,y);
return 0;
}

int b()
{
int x,y,z;
x = y = 2; z = 3;
y =x + +-1; printf("%d\t %d\t",x,y);
y =+ + x-1; printf("%d\t%d\t",x,y);
y =z - -+1; printf("%d\t%d\t",z,y);
y =- -z+1; printf("%d\t%d\n",z,y);
return 0;
}

输出结果为:
3 1 4 3 2 4 1 2
2 1 2 1 3 4 3 4

函数a()的原理我明白,但是函数b()的我不懂,这个函数的结果是怎么得出来的,请用括号在函数b()的表达式中把运算优先级括出来。谢谢

ls的解释的是a函数啊,lz不明白的是b函数...

b和a的区别就在于++和--操作符中间多了一个空格,这样x+ +就不再是x自增操作了(+ +和++不同),x后的单独的一个+可以看做一个正号,不影响数值,所以第一个y =x + +-1就相当于y=x-1,这时x值不变,y值为1,其它的同理。

你说用括号括出来,这个+和-的优先级都一样的,就是按照从左往右顺序计算的,单独的+如果后面不是数值的话可以给忽略掉.也可以把第一个数值后面的所有+ -都看做正负号,累加到第二个数上...

这个只要你明白了前缀的++(--)与后缀的++(--)的区别就知了,前缀的++是将操作数自加1,然后返回修改后的值,后缀的++是将操作数加1,返回修改前的值,比如说y =x + +-1这里就是y=(x++)-1 ==> y=2-1 ==>y=1 x=3
y =+ + x-1 是y=(++x)-1 ==> y=4-1 ==>y=3 x=4

++在前面的就是先加在做别的运算
++在后面的就是先做别的运算在做++

为什么会有像b()这么无聊的函数呢?