*pa++ 표현식의 해석 순서와 관련이 있는데요.
*pa++는 *(pa++)로 해석되며, 이 경우 pa의 값이 먼저 사용되고 나서 pa가 증가합니다.
따라서 printf가 호출될 때 pa는 이미 다음 요소를 가리키고 있습니다.
이로 인해 printf는 a[0]의 주소가 아닌 a[1]의 주소를 출력합니다.
해결하려면 아래와 같이 printf를 *pa를 사용하기 전에 호출하는 것입니다.
#include <stdio.h> int main() { int a[5] = {1, 2, 3, 4, 5}; int *pa = NULL; int hap = 0, cnt = 0; pa = a; for(cnt = 0; cnt < 5; cnt++) { printf("%p\n", (void*)pa); // 각 배열 요소의 주소 출력 hap += *pa++; } printf("합: %d\n", hap); return 0; }
*pa++ 표현식의 해석 순서와 관련이 있는데요.
*pa++는 *(pa++)로 해석되며, 이 경우 pa의 값이 먼저 사용되고 나서 pa가 증가합니다.
따라서 printf가 호출될 때 pa는 이미 다음 요소를 가리키고 있습니다.
이로 인해 printf는 a[0]의 주소가 아닌 a[1]의 주소를 출력합니다.
해결하려면 아래와 같이 printf를 *pa를 사용하기 전에 호출하는 것입니다.
#include <stdio.h> int main() { int a[5] = {1, 2, 3, 4, 5}; int *pa = NULL; int hap = 0, cnt = 0; pa = a; for(cnt = 0; cnt < 5; cnt++) { printf("%p\n", (void*)pa); // 각 배열 요소의 주소 출력 hap += *pa++; } printf("합: %d\n", hap); return 0; }