[英]true/false regarding for and switch
在C書中,有一個是非題,其中以下兩個陳述被描述為是。
1)編譯器為開關中使用的情況實現跳轉表。
2)如果我們希望循環中的語句至少執行一次,則可以使用for循環。
關於這兩點,我有以下問題:
1號陳述的含義是什么?
根據我的說法,第二條語句應該為false,因為對於此任務,我們使用do while
循環。 我對嗎?
第一點要說的是誤導,如果這樣寫的話。 當然,這可能只是重點。 :)
它指的是為switch
語句生成快速代碼的一種常見方式,但是絕對不要求編譯器這樣做。 即使是那些,可能不會因為必然是取舍,也許只有使它值得一做的總是 switch
比n個個案多。 同樣,案例本身通常必須是“緊湊的”,以便提供在表中使用的良好索引。
是的,如果需要至少一次迭代,則使用do
循環,因為它在最后進行測試,而for
和while
則在開始進行測試。
1)這意味着對於編譯器來說,常見的優化是建立一個“跳轉表”,該跳轉表就像一個數組,其中的值是程序接下來將要執行的指令的地址。 構建數組,使索引對應於打開的值。 使用這樣的跳轉表為O(1),而級聯“ if / else”語句的個數為O(n)。
2)當然,您可以使用“ do-while”循環執行“至少一次”操作。 但是您會發現do-while循環在大多數應用程序中並不常見,“ for”循環是最常見的-部分原因是,如果省略括號之間的第一部分和第三部分,它們實際上只是“ while”而已循環! 例如:
for (; i < x; ) // same as while (i < x)
for (i = 0; i == 0 || i < x; ) // like i = 0; do ... while (i < x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.