나는 다음과 같은 코드가 잘 실행 스 니펫을 가지고 이러한 코드 조각의 차이점은 무엇입니까?
char* head = str;
char* tail = head;
while (*tail) {
++tail;
}
나는 단순화를 위해 while 루프를 변경하고 새 코드는
char* head = str;
char* tail = head;
while (*tail++);
나는 위의 두 코드 조각은 같은 일을 생각합니다. 그러나 제 2의 것은한다! GDB에서는 32 자의 문자열에 대해 포인터 꼬리가 31보다 큰 33보다 큰 것을 알 수 있습니다.
저는 정말 당황 스럽습니다.
표현식 (** tail ** 및 ** tail ++)의 ** 값 **이 동일하지만 ** 부작용 **이 다릅니다. – pmg