在C语言中j=(i--*--i)+(i++*++i)跟j=(i++*++i)+(i--*--i)的区别,为什么前者j=13,后者j=25,而i--*--i却=4,i++*++i却=16!不好意思 我忘记说了 i初值是3

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 08:38:17
在C语言中j=(i--*--i)+(i++*++i)跟j=(i++*++i)+(i--*--i)的区别,为什么前者j=13,后者j=25,而i--*--i却=4,i++*++i却=16!不好意思 我忘记说了 i初值是3

在C语言中j=(i--*--i)+(i++*++i)跟j=(i++*++i)+(i--*--i)的区别,为什么前者j=13,后者j=25,而i--*--i却=4,i++*++i却=16!不好意思 我忘记说了 i初值是3
在C语言中j=(i--*--i)+(i++*++i)跟j=(i++*++i)+(i--*--i)的区别,为什么前者j=13,后者j=25,而i--*--i却=4,i++*++i却=16!
不好意思 我忘记说了 i初值是3

在C语言中j=(i--*--i)+(i++*++i)跟j=(i++*++i)+(i--*--i)的区别,为什么前者j=13,后者j=25,而i--*--i却=4,i++*++i却=16!不好意思 我忘记说了 i初值是3
i--*--i却=4是先执行i--,再执行--i,最后执行*,但由于i--的特殊性,开始i=3,i--时i暂不变,--i时i=2,此时注意,因为i值变了,在执行*时系统找i--时,找到i=2,所以相当于(2--)*2=4,之后再i=1.所以整个过程相当于,先执行--i,在执行*,再执行i--.i++*++i同理.
j=(i--*--i)+(i++*++i)则要更复杂一点,当
i--*--i = 4运算出来时i=2,但这时i--还不能执行,因为这是还是在同一个式子里,i=2
带入到i++*++i中运算出得9,此时再进行i--,再i++,得到i=3,所以j=4+9=13.
后者同理.