一个计算机2级c语言的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 04:36:18
#include <stdio.h>
int func(int a,int b)
{int c;
c=a+b;return c;
}
main()
{int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r)
}
要详细的解析过程,谢谢
我不明白的是r=func((x--,y++,x+y),z--);应该怎么理解

#include <stdio.h>
int func(int a,int b)
{int c;
c=a+b;return c;
}
main()
{int x=6,y=7,z=8,r;
x--;y++;
r=func(x+y,z--);
printf("%d\n",r)
}
你可以理解为上面的程序,因为func调的是两个值而已。
过程就是先执行x--,y++后y+x的值是13而已 在z-- 是调用前是z值,调用后
自减一,答案21,

逗号运算符自左向右结合,到x+y时,x自减1,y自增1,内括号的结果则为x+y=5+8=13;另一参数是z--,即先取z的当前值进行功能函数fun的运算,完了再自增1。所以返回值是13+z(拿手机上的,无法跳转,忘了z是多少了!)=结果

其实这题你看明白r=func((x--,y++,x+y),z--);就可以明白了

(x--,y++,x+y),其实与我们平时的

x--;
y++;
x+y;
是一样的。只要程序运行到这里就执行上面的三步。最终结果就是x+y
因为++和--都在后面,所以要先运算后在能执行++,--。

最后func((x--,y++,x+y),z--); 就等价与 func(x+y,z),即func(6+7,8)

所以程序运行结果为 21.