C语言逗号表达式的问题 x=6,y=7,z=8 r=func((x--,y--,x+y),z--)

2024年12月05日 01:04
有5个网友回答
网友(1):

首先说明原理: 

1)逗号运算符也称顺序求值运算符,即从左至右顺序执行,最后一个值会覆盖前面的值,所以使用逗号将几个表达式连接起来的带括号的表达式,最终整个逗号表达式的值为最后一个表达式的值。

2)自增和自减运算符有前置和后置之分,在混合运算中,前置是先自增或者自减,再进行取值;而后置恰好相反,即先取值进行运算,然后再自增或者自减。

在r=func((x--,y--,x+y),z--)这个函数调用中,第一个参数使用了原理1)和2),第二个参数使用了原理2)。

       首先对于第一个参数(x--,y--,x+y),这是一个逗号运算符,从左至右运算:x--(先取x的值,然后x自减,其值变为x=5),同理(先取y的值,然后y自减,其值变为y=6),但由于这是一个逗号运算符,因此x+y的值为x+y=5+6=11,最终r=func((x--,y--,x+y),z--)=func(11,z--);

       其次,z--同理,先取值z=8进行传参数,进行函数调用r=func((x--,y--,x+y),z--),然后z才执行自减(从而z=7)

       补充:如果x--,y--换成r=func((--x,--y,x+y),z--)结果也是一样的,这是因为逗号运算符是从左至右进行运算的,先算完第一个逗号之前的表达式,在计算第二个逗号之前的表达式,依此类推,故,无论是前置还是后置,x的值都是在计算第二个逗号之前已经改变;但是逗号运算符中最后一个逗号除外(前置才起作用,后置对逗号表达式的结果没影响。。。

       书写不易,人艰不拆,不喜勿喷,谢谢点赞!!!

网友(2):

逗号表达式使用逗号连接起来的几个式子。。从左往右执行,最后整个逗号表达式的值为最后一个表达式的值。

所以先执行x-- y-- 然后执行x+y 最后整个逗号表达式的值为x+y的值。即11

z--表示在这个语句中先使用z。。语句之后在--。 即执行完r=()之后 z的值为7,但在当前z使用值为8

网友(3):

x--, 是表达式评估之后才递减,评估完括号里第一个参数x--后,x变成5
同理,评估完括号里第二个参数y--, y变成6
等到评估x+y时,5+6,自然就是11啦。
z--,评估之后才递减,所以传给func的值还是8。

网友(4):

因为x和y自减了以后作为第三个参数
而z--表达式的值为z自减之前的值,为8
表达式运行结束了以后,z为7

网友(5):

逗号表达式使用逗号连接起来的几个式子。。从左往右执行,最后整个逗号表达式的值为最后一个表达式的值。
所以先执行x-- y-- 然后执行x+y 最后整个逗号表达式的值为x+y的值。即11
z--表示在这个语句中先使用z。。语句之后在--。 即执行完r=()之后 z的值为7,但在当前z使用值为8