这个循环如何工作?

时间:2014-12-05 15:02:07

标签: c pointers while-loop

我希望下面的循环增加指针,直到遇到空终止字符。但它无法正常工作。

while (*s++ != '\0')
    ;

这个确实:

while (*s != '\0')
    s++;

我似乎无法理解两者之间的区别。

这个问题与The C Programming Language书的练习5.3有关。

4 个答案:

答案 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)评估(检索值)。