31.9 연습문제: 포인터와 주소 연산자 사용하기

다음 소스 코드를 완성하여 10과 20이 각 줄에 출력되게 만드세요.

practice_pointer.c

#include <stdio.h>

int main()
{
    int *numPtr;
    int num1 = 10;
    int num2 = 20;

     ________________
    printf("%d\n", *numPtr);

    _________________
    printf("%d\n", *numPtr);

    return 0;
}

실행 결과

10
20

정답

 numPtr = &num1;
 numPtr = &num2;

해설

printf에서 numPtr을 역참조하여 출력했을 때 10이 나오려면 10이 저장된 변수 num1의 주소를 구해서 numPtr에 넣어주면 됩니다. 마찬가지로 20이 나오려면 20이 저장된 변수 num2의 주소를 구해서 numPtr에 다시 넣어주면 됩니다. 즉, 같은 포인터라 하더라도 어떤 메모리 주소가 들어있느냐에 따라 접근하는 장소(변수)가 달라집니다.