这个迭代是如何工作的: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)
表示
- 将指针
s
递增到字符串的第二个元素,即 s[1]
。
- 检查
*s
是否为[=14=]
。
- 如果
*s != 0
,则执行循环体,否则转到第5步。
- 将
s
增加 1
。转到步骤 3。
- 退出循环。
结构
for (init ; cond ; incr) { body }
大致翻译为(留在伪代码中)
init
while cond:
body
incr
因此原文可以这样看,这样语义应该更容易理解:
++s;
while (*s) {
/* no body shown */
++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)
表示
- 将指针
s
递增到字符串的第二个元素,即s[1]
。 - 检查
*s
是否为[=14=]
。 - 如果
*s != 0
,则执行循环体,否则转到第5步。 - 将
s
增加1
。转到步骤 3。 - 退出循环。
结构
for (init ; cond ; incr) { body }
大致翻译为(留在伪代码中)
init
while cond:
body
incr
因此原文可以这样看,这样语义应该更容易理解:
++s;
while (*s) {
/* no body shown */
++s;
}