这个循环如何工作?

Kap*_*pol 1 c pointers while-loop

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

while (*s++ != '\0')
    ;
Run Code Online (Sandbox Code Playgroud)

这个做了:

while (*s != '\0')
    s++;
Run Code Online (Sandbox Code Playgroud)

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

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

250*_*501 7

不同之处在于循环后指针的状态.

在第一个示例中,您在0字符后指向一个,在第二个示例中指向0字符.


Nat*_*pel 7

while (*s++ != '\0')
    ;
Run Code Online (Sandbox Code Playgroud)

上面的语句将增加的值s是否(*s++ != '\0')为假或真.如果为false,它也会增加它,但无论如何它都会突破循环.

while (*s != '\0')
    s++;
Run Code Online (Sandbox Code Playgroud)

上面的语句不会增加sif (*s != '\0')返回false 的值,然后断开循环,使得*s仍然指向'\0'.