pointer8.c

    #include <stdio.h>
     
    void swap(int *x, int *y);
     
    main()
    {
        int x, y;
        x = 1, y = 2;
     
        printf("x의 값은 %d, y의 값은 %d\n", x, y);
        swap(&x, &y);         // swap 함수에 정수형 변수 x, y의 주소 값 전달
        printf("x의 값은 %d, y의 값은 %d\n", x, y);
    }
     
    void swap(int *x, int *y) // 호출 시 전달 받은 주소 값을 포인터 변수 x, y에 저장
    {
        int temp;
        temp = *x;            // 역참조하여 main( ) 함수의 변수 x 접근
     
        *x = *y;              // 역참조하여 main( ) 함수의 변수 y 에 저장
        *y = temp;            // temp의 값을 main( ) 함수의 변수 y에 저장
    }

    실행 결과

    x의 값은 1, y의 값은 2

    x의 값은 2, y의 값은 1

    정리해 볼까요? 함수와 함수 사이에 값을 주고받을 때 포인터를 사용하여 주소 값을 전달하면 복사가 아니라 변수의 메모리 주소가 전달됩니다. 따라서 주소를 전달받은 함수 안에서 전달된 주소가 가리키는 값, 즉 함수를 호출한 곳의 변수 값을 변경할 수 있습니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.