2014-12-05 11 views
1

NULL 종료 문자가 발생할 때까지 아래 루프가 포인터를 증가 시키길 원했습니다. 그래도 제대로 작동하지 않습니다.이 루프는 어떻게 작동합니까?

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

이 일을 수행합니다

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

나는 둘 사이의 차이가 무엇인지 이해 수없는 것.

이 질문은 운동 5.3에 관한 The C Programming Language과 관련이 있습니다.

+3

'++'는 * 평가 후 * 값을 증가시킵니다. – bzeaman

답변

7

차이점은 루프 이후의 포인터 상태입니다.

첫 번째 예에서는 0 자 다음에 하나를 가리키고, 두 번째 예에서는 0자를 가리 킵니다.

4

힌트 : 두 경우 모두 ++이 발생하는시기는 언제입니까? 특히 마지막 루프에서 실행?

마지막 루프 실행에서 () 사이의식이 계산됩니다.

첫 번째 예에서 NUL 바이트 다음에 s 포인트를 가지고 ++이 실행됨을 의미합니다.

두 번째 예에서는 ()++이없고 루프 본문이 더 이상 실행되지 않습니다. 그래서 ++이 발생하지 않습니다. sNUL 바이트를 가리 킵니다.

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

위의 진술은 허위 또는 사실 s(*s++ != '\0') 여부를 반환의 가치를 증가시킬 것이다. false이면 증가 할 것이지만 어쨌든 루프에서 빠져 나옵니다.

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

위의 문은 루프의 돌발 여전히 '\0'를 가리키는 유지 *s 있도록하고, 거짓 s(*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 

의 차이는 당신이 "사전"(전) 또는 포스트 (후) 평가 (값의 검색을)를 설정하는 값을 증가할지 여부입니다.

관련 문제