关于和切换的真/假

时间:2014-02-27 12:21:18

标签: c for-loop switch-statement

在C书中有一个真/假的问题,其中以下两个陈述被描述为真。

  

1)编译器为交换机中使用的案例实现跳转表。

     

2)如果我们希望循环中的语句至少执行一次,则可以使用for循环。

关于这两点我有以下问题:

  • 声明编号1的含义是什么?

  • 据我所知,第二个语句应该是假的,因为对于这个任务,我们使用do while循环。我是对的吗?

2 个答案:

答案 0 :(得分:0)

第一点有点误导,如果措辞就像那样。当然,这可能只是重点。 :)

它指的是为switch语句生成快速代码的一种常见方法,但绝对不要求编译器执行此操作。即使那些人也可能不这样做总是因为必然需要权衡利弊,这可能只会使switch超过 n 案件。此外,案例本身通常必须是“紧凑的”,以便提供在表中使用的良好索引。

是的,如果你想要至少一次迭代,do循环是使用什么,因为它在最后进行测试,而forwhile都在启动。

答案 1 :(得分:0)

1)这意味着一个常见的优化是编译器构建一个“跳转表”,就像一个数组,其中值是程序下一步执行的指令的地址。构建阵列使得索引对应于正在接通的值。使用这样的跳转表是O(1),而“if / else”语句的级联在案例数中是O(n)。

2)当然,你可以使用“do-while”循环执行“至少一次”的操作。但你会发现do-while循环在大多数应用程序中相当罕见,而“for”循环是最常见的 - 部分是因为如果省略括号之间的第一和第三部分,它们实际上只是花哨的“而”循环!例如:

for (; i < x; ) // same as while (i < x)
for (i = 0; i == 0 || i < x; ) // like i = 0; do ... while (i < x)