簡體   English   中英

對於for和switch,為真/假

[英]true/false regarding for and switch

在C書中,有一個是非題,其中以下兩個陳述被描述為是。

1)編譯器為開關中使用的情況實現跳轉表。

2)如果我們希望循環中的語句至少執行一次,則可以使用for循環。

關於這兩點,我有以下問題:

  • 1號陳述的含義是什么?

  • 根據我的說法,第二條語句應該為false,因為對於此任務,我們使用do while循環。 我對嗎?

第一點要說的是誤導,如果這樣寫的話。 當然,這可能只是重點。 :)

它指的是為switch語句生成快速代碼的一種常見方式,但是絕對不要求編譯器這樣做。 即使是那些,可能不會因為必然是取舍,也許只有使它值得一做的總是 switchn個個案多。 同樣,案例本身通常必須是“緊湊的”,以便提供在表中使用的良好索引。

是的,如果需要至少一次迭代,則使用do循環,因為它在最后進行測試,而forwhile則在開始進行測試。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM