繁体   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