課程
/后端開發
/C
/C語言入門
在3-3一節中說了啊,不論是b++還是++b都是b=b+1,那么b=10????
2015-08-15
源自:C語言入門 3-8
正在回答
所以說這個課程糟透了,很多都沒講清楚。
通常說,a++是先取值后運算,++a是先運算后取值。實際上這里涉及“運算符” “表達式”的概念。
++ 是一個“自增運算符”,自增運算符有兩種形式:前置自增(++a)和后置自增(a++)。
運算符和操作數合起來就是一個表達式(a++、++a都是表達式,a就是操作數)。注意:每一個表達式本身都有值(和其類型),有的表達式還有“副作用”。比如自增表達式的副作用就是使其操作數自增1。那么自增運算表達式的值是什么呢??a++ 的值就是 a 的值,而 ++a 的值等于 a+1。?
所以如果b是9,b++的值就是9,在之后b的值會變成10(副作用),那么這個之后是什么時候呢?
這涉及到另一個關鍵內容“序列點”,副作用在序列點后保證會發生(請注意這一句的措辭)。序列點這個概念比較復雜,語句結束時算是序列點,邏輯運算符處也是一個序列點......還有其他的情況,就不細說了??傊蛄悬c之前的運算符的副作用,在執行到這點以后都保證會發生。注意并不是在過了這一點后就突然發生的,這些副作用可能在序列點前的任何一個位置發生,C標準只是規定在序列點之后這些副作用必須已經發生了。
所以:
選項A: b++的值就是9,小于5*2,所以表達式前半部分為false,由于是邏輯與運算符,所以不再繼續判斷后半部分了,整個表達式就是false。
選項B: b++ >= a*2 還是false,因為是邏輯或運算符,所以繼續判斷后半部分,又因為邏輯運算符處為序列點,所以 b - a <= a 中的b已經自增了,值成10,10-5<=5為true。整個表達式為true。
選項C: 5*2-9 = 1,1的非為false。
選項D: ++b的值是9+1=10,10-5*2=0,0被視為false。
qq_沒瘋度_0 提問者
小白的夢想導師
onemoo 回復 小白的夢想導師
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
6 回答b++不是等于10嗎?為啥是9,求大神解答
1 回答a=3,b=4 b%(a+b)/a為什么等于1,怎么算的
3 回答int b=9,為什么b++為9,而不是10呢?
1 回答max不是等于10的嗎
3 回答前面加了個int,main方法內x不也等于50嗎,為什么會等于10?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-08-15
所以說這個課程糟透了,很多都沒講清楚。
通常說,a++是先取值后運算,++a是先運算后取值。實際上這里涉及“運算符” “表達式”的概念。
++ 是一個“自增運算符”,自增運算符有兩種形式:前置自增(++a)和后置自增(a++)。
運算符和操作數合起來就是一個表達式(a++、++a都是表達式,a就是操作數)。注意:每一個表達式本身都有值(和其類型),有的表達式還有“副作用”。比如自增表達式的副作用就是使其操作數自增1。那么自增運算表達式的值是什么呢??a++ 的值就是 a 的值,而 ++a 的值等于 a+1。?
所以如果b是9,b++的值就是9,在之后b的值會變成10(副作用),那么這個之后是什么時候呢?
這涉及到另一個關鍵內容“序列點”,副作用在序列點后保證會發生(請注意這一句的措辭)。序列點這個概念比較復雜,語句結束時算是序列點,邏輯運算符處也是一個序列點......還有其他的情況,就不細說了??傊蛄悬c之前的運算符的副作用,在執行到這點以后都保證會發生。注意并不是在過了這一點后就突然發生的,這些副作用可能在序列點前的任何一個位置發生,C標準只是規定在序列點之后這些副作用必須已經發生了。
所以:
選項A: b++的值就是9,小于5*2,所以表達式前半部分為false,由于是邏輯與運算符,所以不再繼續判斷后半部分了,整個表達式就是false。
選項B: b++ >= a*2 還是false,因為是邏輯或運算符,所以繼續判斷后半部分,又因為邏輯運算符處為序列點,所以 b - a <= a 中的b已經自增了,值成10,10-5<=5為true。整個表達式為true。
選項C: 5*2-9 = 1,1的非為false。
選項D: ++b的值是9+1=10,10-5*2=0,0被視為false。