실행해 보면 함수 호출 전에 a가 10, b가 20이었는데, 함수 호출 후에도 a가 10, b가 20으로 값이 그대로입니다. 그런데 함수 안에서는 a가 20, b가 10으로 두 값이 서로 바뀌었습니다. 왜 그럴까요?
이는 main()함수에서 swap()함수를 호출할 때 변수 a와 b를 전달했지만, 실제로는 두 변수 자체가 아닌 두 변수의 값만 전달해서 그렇습니다. 변수의 주소를 출력해서 무슨 뜻인지 확인해 봅시다.
7.3.2 포인터로값교환하기.c
int main(void) {
int a = 10;
int b = 20;
printf("a의 주소 : %p\n", &a);
printf("b의 주소 : %p\n", &b);
printf("swap() 함수 호출 전 => a : %d, b : %d\n", a, b); // 교환하기 전 변수 값 출력
swap(a, b);
printf("swap() 함수 호출 후 => a : %d, b : %d\n", a, b); // 교환한 후 변수 값 출력
return 0;
}
void swap(int a, int b) {
printf("swap() 함수 안에서 a의 주소 : %p\n", &a);
printf("swap() 함수 안에서 b의 주소 : %p\n", &b);
int temp = a;
a = b;
b = temp;
printf("swap() 함수 안 => a : %d, b : %d\n", a, b);
}