int a = 3; b = 4;計(jì)算a+b%a-b/a+a*b-a++該算式的運(yùn)算結(jié)果以及運(yùn)算后a的值如果題目改成int a = 3; b = 4;計(jì)算a+b%a-b/a+a*b-(++a)答案是多少啊?
int a = 3; b = 4;計(jì)算a+b%a-b/a+a*b-a++該算式的運(yùn)算結(jié)果以及運(yùn)算后a的值如果題目改成int a = 3; b = 4;計(jì)算a+b%a-b/a+a*b-(++a)答案是多少?。?/p>
2015-07-22
沒(méi)有答案, a+b%a-b/a+a*b-a++ 這個(gè)式子本身就是錯(cuò)的。
你先要明白前置自增運(yùn)算符和后置自增運(yùn)算符是怎么回事:
通常說(shuō),a++是先取值后運(yùn)算,++a是先運(yùn)算后取值。實(shí)際上這里涉及“運(yùn)算符”、“表達(dá)式”和“語(yǔ)句”的概念。
++ 是一個(gè)“自增運(yùn)算符”,自增運(yùn)算符有兩種形式:前綴自增(++a)和后綴自增(a++)。
運(yùn)算符和操作數(shù)合起來(lái)就是一個(gè)表達(dá)式(a++、++a都是表達(dá)式,a就是操作數(shù))。注意:每一個(gè)表達(dá)式本身都有值(和其類型),有的表達(dá)式還有“副作用”。比如自增表達(dá)式的副作用就是使其操作數(shù)自增1。那么自增運(yùn)算表達(dá)式的值是什么呢? a++ 的值就是 a 的值,而 ++a 的值等于 a+1。?
表達(dá)式后面加上一個(gè)分號(hào)才是一個(gè)完整的“語(yǔ)句”。
還有一個(gè)關(guān)鍵內(nèi)容:前面說(shuō)使操作數(shù)自增1是自增表達(dá)式的副作用,那么這個(gè)副作用什么時(shí)候發(fā)生呢? 準(zhǔn)確地說(shuō)是在“序列點(diǎn)”后保證會(huì)發(fā)生。 序列點(diǎn)這個(gè)概念比較復(fù)雜,簡(jiǎn)單地說(shuō):“語(yǔ)句結(jié)束時(shí)”是一個(gè)序列點(diǎn)。這序列點(diǎn)之前的運(yùn)算符的副作用,在執(zhí)行到這點(diǎn)以后都保證會(huì)發(fā)生。注意并不是在這一點(diǎn)之后就突然發(fā)生的,這些副作用可能在序列點(diǎn)前的任何一個(gè)位置發(fā)生,C標(biāo)準(zhǔn)只是規(guī)定在序列點(diǎn)之后這些副作用必須都已經(jīng)發(fā)生了。
在a+b%a-b/a+a*b-a++這個(gè)大復(fù)合表達(dá)式中,最后有一個(gè)a++,這個(gè)子表達(dá)式的值是3沒(méi)有錯(cuò)(因?yàn)槭窍惹笾翟僮栽觯?,但在整個(gè)表達(dá)式中a還出現(xiàn)了很多次,就是說(shuō)需要取a的值很多次,可是最后這個(gè)子表達(dá)式a++的副作用在什么時(shí)候發(fā)生是并不確定的。我只知道在整個(gè)語(yǔ)句結(jié)束之后a的值肯定是4,但a也可能在取第一個(gè)a的值時(shí)就已經(jīng)是4了......也可能第一個(gè)a還是3,第二個(gè)a就是4了......也可能所有的a都是3......這一切都是有可能的。所以也許這段代碼在我這里編譯出的結(jié)果就和你的不一樣。
對(duì)于寫復(fù)合表達(dá)式,一般建議:如果表達(dá)式改變了一個(gè)操作數(shù)的值,那就不要在這個(gè)復(fù)合表達(dá)式中再次使用這個(gè)操作數(shù)。除非你能確定“改變值”和“使用值”的先后順序。?在這個(gè)例子中,顯然你不能確定順序。