在C中给出一个字符串指针s
,下面的迭代会做什么?即它以什么方式迭代字符串?
for (++s ; *s; ++s);
答案 0 :(得分:4)
for (++s ; *s; ++s)
表示
s
增加到字符串的第二个元素,即s[1]
。 *s
是否为\0
。 *s != 0
,则执行循环体,否则转到步骤5. s
增加1
。转到第3步。答案 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)。