首页 > 解决方案 > 这个反向循环在 C 中是否正确?

问题描述

有时在 javascript 中你可以看到像这样的反向循环:

for ( let i =10; i--;) { ... } 

i循环内获取从 9 到零的值。当> 0时,
布尔评估i-- 为真, 然后循环内部的值, 第三个参数保持为空,因为之前已经完成了 的递减。i
(i-1)
i

在 C 中,这应该是:(?)

for (int i =10; i--;) { ... }

我只是想知道这是否可以用 C 语言接受(和工作)?

我只想知道它是否可以完成,并给这个 for 循环一个相同的结果:

for (int i =9; i>=0 ;i--) { ... }

标签: cfor-loop

解决方案


是的,您的假设代码是有效的 C 语言,并且会按预期工作。但是,请注意轻微的变体

for (unsigned int i = 10; i >= 0; i--) { ... }

这是一个无限循环,因为 unsigned int 不能小于零。JavaScript 没有无符号类型,所以这不会发生在那里。

为什么会有人这么写?好吧,假设您出于某种原因需要向后压缩一个字符串,您可能自然会写

for (size_t i = strlen(s); i >= 0; i--) { ... use s[i] ... }

但是,哎呀, size_t 是无符号的。


推荐阅读