答案確實是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--
答案確實是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--