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