C语言.大家帮忙看看这个程序 一个地放不知道怎么执行

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:10:51
有以下程序
#include<stdio.h>
func(int a,int b)
{ static int c=0;
c+=a+b;
return c;
}
main()
{ int x=6,y=7,z=8,r;
r=func((x- - ,y++,x+y),z - - );
r+=func(x,y);
printf(“%d\n”,r);
}
上面程序的输出结果是
A 34 B 55 C 40 D 31

请问func((x- - ,y++,x+y),z - - ); 是怎么来执行的 ?
特别是((x- - ,y++,x+y), 应该没这个表达式的吧
谢谢了

结果: 55
1.func((x- - ,y++,x+y),z - - ); 两个参数.
第一个参数((x- - ,y++,x+y)为逗号表达式,最后一个表达式x+y 为逗号表达式的值.
第二个参数z - -
2.所以func((x- - ,y++,x+y),z - - ); 等价func(13,8)此时r=func((x- - ,y++,x+y),z - - );变量r为21
3.r+=func(x,y);--->r=r+func(x,y); --->r=21+34=55
4.由于c为静态变量,所以c+=a+b; --->c=c+(a+b)---->c=21+13=34

(x--,y++,x+y)是逗号表达式,它的值是第一个表达式。

所以func((x- - ,y++,x+y),z - - );
func()
的参数是x--,z--
明白这个就可以了。。。

希望能够有用。

严重怀疑LS的听课不认真,逗号表达式的值是最后一个表达式的值,(x-- ,y++,x+y)等价于x+y,所以func((x-- ,y++,x+y),z--);等价于func((x+y),z--);

fun(x+y,z);
x--;y++;z--;
应该是这样的
(x- - ,y++,x+y)这是逗号表达式

(
第一个参数((x- - ,y++,x+y)为逗号表达式,最后一个表达式x+y 为逗号表达式的值.
前面的x--和Y++虽然不作为逗号表达式的值,但也会执行,这样X和Y的值会发生变化。
func((x- - ,y++,x+y),z - - )这个函数执行完以后,X=5,Y=8,
func(13,8), Z=7。
照这样想,就可以解决了。答案应该选A吧!

(x--,y++,x+y)是逗号表达式!要x+y的值!
答案应该是55!