r=func((x--,y++,x+y),z--); 怎么理解? 结果为啥是21? fun函数怎么理解呢

2024-12-05 00:48:09
推荐回答(3个)
回答(1):

答案确实是21,前面两个回答其实都是错的,只需要实际测试一下就知道了。r=func((x--,y++,x+y),z--);这里首先(x--,y++,x+y)和z--是func函数的两个实参,第一个实参是一个逗号表达式,逗号表达式依次求值,并以最后一个表达式的值为逗号表达式的值,x--,y++,x+y依次求值就是x=x-1,6-1=5,x=5,y++求值就是y=y+1,7+1=8,y=8,x+y求值就是5+8=13,之所以这里x--和y++要自减1和自增1,是因为他们出现在逗号表达式中,每一个本身就是独立的表达式,所以前面有人解释x+y是6+7=13其实只是恰好一减一增结果一样而已,过程是错误的,不信可以改变y++为y或者y--自行测试;至于第二个实参z--,在传递到func函数形参时,有c=a+b,也就是z--传递给b参与运算,自减符号在右侧,因为z先参与运算,再自减1,所以,作为这道题的结果而言,是(5+8)+8=21,最终的x=5,y=8,z=7.以上只需测试即可知,实际上,实参传递形参的整个表达式可以等价于r=(x--,y++,x+y)+z--

回答(2):

逗号表达式,依次求值最后结果是最右面的表达式,x--为5,y++为8,x+y为13,所以里面括号的内容是13,z--是7,向fun传递为(13,7),所以结果为20

回答(3):

f(a,b)=a+b
f(6+7,8)=13+8=21