海口政府招标网:C语言问题..普通小问题..

来源:百度文库 编辑:神马品牌网 时间:2024/04/28 15:08:17
#include <stdio.h>
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("r=%d\n",r);
}

这个程序的值为21..为什么不是20啊??
有人能解答嘛>?
谢谢拉!

逗号表达式的概念就不重复了
x-- 5 吧
y++ 8 吧
5 + 8 13 吧 (有括号的逗号表达式传的是最后一个值)
z-- 传的参数是8 z还没减呢

r=func((x--,y++,x+y),z--);
你为什么认为是20呢

上面的在运行中X已经自减了,而Y又自加了,所以结果还是13,
Z的值是在用过以后才进行自减的
所以么13+8为什么是21就不用我说拉

func((x--,y++,x+y),z--);
(x--,y++,x+y),输进去的参数是(6-1)+(7+1)=13 应该没问题吧?
z--是先传入z的值,再让z=z-1
所以是13+8=21

应该是r=func((x--,y++,x+y),z--);你没理解吧,z--是先使用z的值,然后再-1,也就是先吧z=8带入函数,然后在变为7.如果想要先-1的话,用 --z .