NULL 종료 문자가 발생할 때까지 아래 루프가 포인터를 증가 시키길 원했습니다. 그래도 제대로 작동하지 않습니다.이 루프는 어떻게 작동합니까?
while (*s++ != '\0')
;
이 일을 수행합니다
while (*s != '\0')
s++;
나는 둘 사이의 차이가 무엇인지 이해 수없는 것.
이 질문은 운동 5.3에 관한 The C Programming Language
과 관련이 있습니다.
NULL 종료 문자가 발생할 때까지 아래 루프가 포인터를 증가 시키길 원했습니다. 그래도 제대로 작동하지 않습니다.이 루프는 어떻게 작동합니까?
while (*s++ != '\0')
;
이 일을 수행합니다
while (*s != '\0')
s++;
나는 둘 사이의 차이가 무엇인지 이해 수없는 것.
이 질문은 운동 5.3에 관한 The C Programming Language
과 관련이 있습니다.
차이점은 루프 이후의 포인터 상태입니다.
첫 번째 예에서는 0 자 다음에 하나를 가리키고, 두 번째 예에서는 0자를 가리 킵니다.
힌트 : 두 경우 모두 ++
이 발생하는시기는 언제입니까? 특히 마지막 루프에서 실행?
마지막 루프 실행에서 ()
사이의식이 계산됩니다.
첫 번째 예에서 NUL
바이트 다음에 s
포인트를 가지고 ++
이 실행됨을 의미합니다.
두 번째 예에서는 ()
에 ++
이없고 루프 본문이 더 이상 실행되지 않습니다. 그래서 ++
이 발생하지 않습니다. s
은 NUL
바이트를 가리 킵니다.
while (*s++ != '\0')
;
위의 진술은 허위 또는 사실 s
(*s++ != '\0')
여부를 반환의 가치를 증가시킬 것이다. false이면 증가 할 것이지만 어쨌든 루프에서 빠져 나옵니다.
while (*s != '\0')
s++;
위의 문은 루프의 돌발 여전히 '\0'
를 가리키는 유지 *s
있도록하고, 거짓 s
(*s != '\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
의 차이는 당신이 "사전"(전) 또는 포스트 (후) 평가 (값의 검색을)를 설정하는 값을 증가할지 여부입니다.
'++'는 * 평가 후 * 값을 증가시킵니다. – bzeaman