这个迭代是如何工作的:for(++s ; *s; ++s)

How does this iteration work: for(++s ; *s; ++s)

给定 C 语言中的字符串指针 s,以下迭代会做什么?即它以什么方式遍历字符串?

for (++s ; *s; ++s);

它只是从 str[1] 而不是 str[0] 开始迭代,检查 *str 是否为空终止符。

它是这样工作的:设 str 为 5 个字符的数组。 str->['f']['k']['g']['h']['\0']

++str 是 'k' 而 str[0] 是 'f'。然后循环直到找到'\0'。

这个for语句

for (++s ; *s; ++s)

其实相当于下面的

for ( int i = 1; s[i] != '[=11=]' ; ++i )

唯一的区别是,在第一个 for 语句指针 s 将沿着字符串移动之后,在第二个 for statamenet 中,它是将在迭代中更改的索引(变量 i)。

for (++s ; *s; ++s) 表示

  1. 将指针 s 递增到字符串的第二个元素,即 s[1]
  2. 检查*s是否为[=14=]
  3. 如果*s != 0,则执行循环体,否则转到第5步。
  4. s 增加 1。转到步骤 3。
  5. 退出循环。

结构

for (init ; cond ; incr) { body }

大致翻译为(留在伪代码中)

init
while cond:
    body
    incr

因此原文可以这样看,这样语义应该更容易理解:

++s;
while (*s) {
   /* no body shown */
   ++s;
}