더북(TheBook)

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

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

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