課程
/后端開發(fā)
/PHP
/PHP入門篇
完全就是扯,即使沒有break,執(zhí)行case3的時(shí)候不先要判斷3是不是num嗎?
2017-08-09
源自:PHP入門篇 6-6
正在回答
題主這個(gè)問題很經(jīng)典,這其中涉及到編譯的問題。事先聲明,接下來我的回答都是我的個(gè)人理解,肯定會有不準(zhǔn)確的表述。
咱們現(xiàn)在看到的switch結(jié)構(gòu),一旦經(jīng)過編譯器處理后,指令的順序就大大不一樣了,編譯器會把所有的case判斷轉(zhuǎn)換成匯編指令放到一起,把分別執(zhí)行的語句也放到一起,加載到內(nèi)存中就是兩塊連續(xù)的存儲空間,一塊放判斷,一塊放動作。兩塊怎么聯(lián)系起來?通過給動作空間進(jìn)行標(biāo)號,程序執(zhí)行時(shí),(注意,這里的匯編指令就是判斷+跳轉(zhuǎn)),先判斷,一旦判斷符合,跳轉(zhuǎn)到相應(yīng)標(biāo)號的動作區(qū)域執(zhí)行動作,如果判斷不符合,接著下一條判斷(判斷+跳轉(zhuǎn))。再說說動作區(qū)域的執(zhí)行,要知道,動作區(qū)域的執(zhí)行也是從上往下一條條順序執(zhí)行的,所以,如果相應(yīng)的動作后面不加break,就會順序執(zhí)行下一條動作。我們可以理解成break被轉(zhuǎn)換成一條跳轉(zhuǎn)指令放到了動作區(qū)域里,只不過break不需要判斷跳轉(zhuǎn),它是直接跳轉(zhuǎn),跳轉(zhuǎn)的目的地也是動作區(qū)域的一個(gè)標(biāo)號,end,跳出。
列幾個(gè)網(wǎng)址,有時(shí)間看看。PS,別鉆牛角尖。
http://book.51cto.com/art/201312/421963.htm
http://blog.csdn.net/lixiangminghate/article/details/71171804?utm_source=gold_browser_extension
這個(gè)很好,注釋很完美。
http://blog.sina.com.cn/s/blog_5526d40f0100orrc.html? ? 這個(gè)文章后半段感覺不好,貌似作者自己在弄編譯器。
首先是判斷”num是不是3“而不是判斷”3是不是num“其次,從實(shí)現(xiàn)的角度,一旦任何一個(gè)case匹配了,他就會順序向下執(zhí)行”后大括號前的所有操作“,而忽略case和default
慕圣5475749 提問者
decho 回復(fù) 慕圣5475749 提問者
舉報(bào)
PHP入門教程輕松學(xué)習(xí),行業(yè)大牛幫您快速掌握PHP編程基礎(chǔ)知識。
2 回答沒有break的case是否還判斷
1 回答switch中的條件 來判斷執(zhí)行哪一個(gè) case ,其他的都不執(zhí)行嗎?
1 回答case 后兩個(gè)表達(dá)式語句,難道不需要加個(gè)大括號嗎?
1 回答這個(gè)case和break分別是什么意思
1 回答break 要不要添加的 問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-08-25
題主這個(gè)問題很經(jīng)典,這其中涉及到編譯的問題。事先聲明,接下來我的回答都是我的個(gè)人理解,肯定會有不準(zhǔn)確的表述。
咱們現(xiàn)在看到的switch結(jié)構(gòu),一旦經(jīng)過編譯器處理后,指令的順序就大大不一樣了,編譯器會把所有的case判斷轉(zhuǎn)換成匯編指令放到一起,把分別執(zhí)行的語句也放到一起,加載到內(nèi)存中就是兩塊連續(xù)的存儲空間,一塊放判斷,一塊放動作。兩塊怎么聯(lián)系起來?通過給動作空間進(jìn)行標(biāo)號,程序執(zhí)行時(shí),(注意,這里的匯編指令就是判斷+跳轉(zhuǎn)),先判斷,一旦判斷符合,跳轉(zhuǎn)到相應(yīng)標(biāo)號的動作區(qū)域執(zhí)行動作,如果判斷不符合,接著下一條判斷(判斷+跳轉(zhuǎn))。再說說動作區(qū)域的執(zhí)行,要知道,動作區(qū)域的執(zhí)行也是從上往下一條條順序執(zhí)行的,所以,如果相應(yīng)的動作后面不加break,就會順序執(zhí)行下一條動作。我們可以理解成break被轉(zhuǎn)換成一條跳轉(zhuǎn)指令放到了動作區(qū)域里,只不過break不需要判斷跳轉(zhuǎn),它是直接跳轉(zhuǎn),跳轉(zhuǎn)的目的地也是動作區(qū)域的一個(gè)標(biāo)號,end,跳出。
列幾個(gè)網(wǎng)址,有時(shí)間看看。PS,別鉆牛角尖。
http://book.51cto.com/art/201312/421963.htm
http://blog.csdn.net/lixiangminghate/article/details/71171804?utm_source=gold_browser_extension
這個(gè)很好,注釋很完美。
http://blog.sina.com.cn/s/blog_5526d40f0100orrc.html? ? 這個(gè)文章后半段感覺不好,貌似作者自己在弄編譯器。
2017-08-09
首先是判斷”num是不是3“而不是判斷”3是不是num“
其次,從實(shí)現(xiàn)的角度,一旦任何一個(gè)case匹配了,他就會順序向下執(zhí)行”后大括號前的所有操作“,而忽略case和default