2014-12-05 96 views
1

我希望下面的循環增加指針,直到遇到空終止字符。儘管如此,它無法正常工作。這個循環是如何工作的?

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

這一個作用:

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

我似乎無法瞭解什麼是兩者之間的區別。

這個問題涉及練習5.3的The C Programming Language一書。

+3

'++'會在評估後增加值*。 – bzeaman 2014-12-05 15:05:19

回答

7

區別在於循環後指針的狀態。

在第一個示例中,您在0字符之後指向一個字符,而在第二個示例中您指向0字符。

4

提示:在兩種情況下發生++時,什麼時候不是?特別是在最後一次循環運行?

讓我們看看:在最後一次循環運行中,評估()之間的表達式。

在第一個例子中,這意味着++被執行,在NUL字節之後具有s點。

在第二個示例中,()中沒有++,並且循環體不再執行。所以++沒有發生,有s指向NUL字節。

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

上面的語句將增加s是否(*s++ != '\0')收益或真或假的值。如果錯誤,它也會增加它,但它會反彈出循環。

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

上面的語句將不會增加s如果(*s != '\0')返回false的值,然後終止循環,使使*s仍保持指向'\0'

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 

的區別在於是否要增加值要設置「預」(之前)或交(後)評價(價值的檢索)。