#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("%d\n",r); } 上面程序的输出结果是_______。
func((x-,y++,x+y),z-)这里漏写了吧,func((x--,y++,x+y),z--)?
这样的话结果是 21
过程如下:
(x--,y++,x+y)是逗号表达式,结果是最右侧的值,计算从左到右,
x--,x=5
y++,y=8
x+y=13
(x--,y++,x+y)这个表达式的结果就是13
r=func(13,z--)先计算 r=func(13,8)=21,然后z--
最后显示r的值,就是21
编译器运行结果:
x=6,y=7,z=8,r, r=func((x-,y++,x+y),z-)
函数第一个传入参数是个逗号表达式,从左向右执行,x--使得x变为5,y++使得y变为8,x+y的结果为13,逗号表达式的结果为最右边的表达式结果,即x+y=13,z--先用z进行函数处理,然后z减去1,所以相当于调用func(13,8),函数内是对两个参数相加,所以最终返回21
#include <stdio.h>
int func(int a,int b) {
int c; c=a+b;
return c;
}
int main(){
int x=6,y=7,z=8,r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}