我希望下面的循环增加指针,直到遇到空终止字符。但它无法正常工作。
while (*s++ != '\0')
;
这个确实:
while (*s != '\0')
s++;
我似乎无法理解两者之间的区别。
这个问题与The C Programming Language
书的练习5.3有关。
答案 0 :(得分:7)
不同之处在于循环后指针的状态。
在第一个例子中,你在0字符后指向一个,在第二个例子中指向0字符。
答案 1 :(得分:7)
while (*s++ != '\0')
;
无论s
是返回false还是true,上述语句都会增加(*s++ != '\0')
的值。如果为false,它也会增加它,但无论如何它都会突然出现。
while (*s != '\0')
s++;
如果s
返回false,则上述语句不会增加(*s != '\0')
的值,然后突破循环,使*s
仍然指向{{ 1}}。
答案 2 :(得分:4)
提示:在两种情况下都会发生++
,什么时候不发生?特别是在最后一次循环运行?
让我们来看看:在最后一次循环运行中,评估()
之间的表达式。
在第一个示例中,这意味着++
已执行,s
字节后面有NUL
点。
在第二个示例中,++
中没有()
,循环体不再执行。因此++
没有发生,s
指向NUL
字节。
答案 3 :(得分:0)
" ++"是一个增量运算符,其功能非常类似于" s + = 1"或" s = s + 1"虽然++确实将s递增1,但运算符的位置将影响结果。请注意以下内容:
int x;
int y;
// Increment operators
x = 1;
y = ++x; // x is now 2, y is also 2
y = x++; // x is now 3, y is 2
区别在于您是否要增加要设置的值" pre"(Before)或post(after)评估(检索值)。