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