課程
/后端開發(fā)
/C
/C語言入門
a+b%a-b/a+a*b-a++
2015-06-18
源自:C語言入門 3-4
正在回答
先確定你清楚“運算符”、“表達式”和“語句” 的關(guān)系:
++ 是一個“自增運算符”,運算符和操作數(shù)合起來就是一個表達式(a++、++a都是表達式,a就是操作數(shù))。每一個表達式都有值(和其類型)。有的運算符還有“副作用”,比如自增運算符的副作用就是使其操作數(shù)自增1。那么自增運算表達式的值是什么呢? a++ 的值就是 a 的值,而 ++a 的值等于 a+1。
表達式后面加上一個分號就是一個“語句”。
那么這個自增運算符的副作用(使a增加1)什么時候發(fā)生的呢? 我只能說在“序列點”之后肯定都發(fā)生了。代碼中有的位置被稱為“序列點”,具體哪些位置是序列點有些復(fù)雜,簡單地說:“語句結(jié)束時”和“邏輯運算符的兩個操作數(shù)之間”......都算是序列點。這序列點之前的運算符的副作用,在執(zhí)行到這點以后都保證會發(fā)生。注意并不是在這一點之后就突然發(fā)生的,這些副作用可能在序列點前的任何一個位置發(fā)生,C標(biāo)準(zhǔn)只是規(guī)定在序列點之后這些副作用必須都已經(jīng)發(fā)生了。
求值順序決定了哪些子表達式先運算,但是并沒有規(guī)定它們操作數(shù)的求值順序。副作用什么時候發(fā)生更是與優(yōu)先級沒有關(guān)系。
對于你的這個題:
題本身就有問題!! ?原因還是因為序列點。在a+b%a-b/a+a*b-a++這個大復(fù)合表達式中,最后有一個a++,這個子表達式的值是3沒有錯(因為是先求值再自增),但在整個表達式中a還出現(xiàn)了很多次,就是說需要取a的值很多次,可是最后這個子表達式a++的副作用在什么時候發(fā)生是并不確定的。我只知道在整個語句結(jié)束之后a的值肯定是4,但a也可能在取第一個a的值時就已經(jīng)是4了......也可能第一個a還是3,第二個a就是4了......也可能所有的a都是3......這一切都是有可能的。所以本題完全就錯了??!
P.S. 這個C課程的水平實在是......別浪費時間學(xué)了
正在進化的程序猿 提問者
onemoo 回復(fù) 正在進化的程序猿 提問者
http://idcbgp.cn/code/5175? 看看這節(jié)的運算符順序?
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
1 回答變量a,b的值為什么變化了
2 回答為什么x的值最后還是變化了,原題目上給的注釋a最后都沒變
1 回答舉的例子,為啥計算(a+1)的時候,a的值又變回100了
2 回答a+++a+++a++算出來為多少?
5 回答b%(a+b)/a 我怎么算出來是4/3
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2015-06-18
先確定你清楚“運算符”、“表達式”和“語句” 的關(guān)系:
++ 是一個“自增運算符”,運算符和操作數(shù)合起來就是一個表達式(a++、++a都是表達式,a就是操作數(shù))。每一個表達式都有值(和其類型)。有的運算符還有“副作用”,比如自增運算符的副作用就是使其操作數(shù)自增1。那么自增運算表達式的值是什么呢? a++ 的值就是 a 的值,而 ++a 的值等于 a+1。
表達式后面加上一個分號就是一個“語句”。
那么這個自增運算符的副作用(使a增加1)什么時候發(fā)生的呢? 我只能說在“序列點”之后肯定都發(fā)生了。代碼中有的位置被稱為“序列點”,具體哪些位置是序列點有些復(fù)雜,簡單地說:“語句結(jié)束時”和“邏輯運算符的兩個操作數(shù)之間”......都算是序列點。這序列點之前的運算符的副作用,在執(zhí)行到這點以后都保證會發(fā)生。注意并不是在這一點之后就突然發(fā)生的,這些副作用可能在序列點前的任何一個位置發(fā)生,C標(biāo)準(zhǔn)只是規(guī)定在序列點之后這些副作用必須都已經(jīng)發(fā)生了。
求值順序決定了哪些子表達式先運算,但是并沒有規(guī)定它們操作數(shù)的求值順序。副作用什么時候發(fā)生更是與優(yōu)先級沒有關(guān)系。
對于你的這個題:
題本身就有問題!! ?原因還是因為序列點。在a+b%a-b/a+a*b-a++這個大復(fù)合表達式中,最后有一個a++,這個子表達式的值是3沒有錯(因為是先求值再自增),但在整個表達式中a還出現(xiàn)了很多次,就是說需要取a的值很多次,可是最后這個子表達式a++的副作用在什么時候發(fā)生是并不確定的。我只知道在整個語句結(jié)束之后a的值肯定是4,但a也可能在取第一個a的值時就已經(jīng)是4了......也可能第一個a還是3,第二個a就是4了......也可能所有的a都是3......這一切都是有可能的。所以本題完全就錯了??!
P.S. 這個C課程的水平實在是......別浪費時間學(xué)了
2015-06-18
http://idcbgp.cn/code/5175? 看看這節(jié)的運算符順序?