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

时间:2015-03-03 16:39:58

标签: c string for-loop

在C中给出一个字符串指针s,下面的迭代会做什么?即它以什么方式迭代字符串?

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

这样的工作原理如下:让str为5个字符的数组。 STR-> [' F'] [' K'] [' G'] [' H'] [' \ 0']

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

答案 2 :(得分:3)

构造

for (init ; cond ; incr) { body }

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

init
while cond:
    body
    incr

因此可以将原始文件视为以下内容,在这种情况下,语义应该更容易理解:

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

答案 3 :(得分:1)

这句话

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

实际上相当于以下

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

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