더북(TheBook)

실행해 보면 함수 호출 전에 a가 10, b가 20이었는데, 함수 호출 후에도 a가 10, b가 20으로 값이 그대로입니다. 그런데 함수 안에서는 a가 20, b가 10으로 두 값이 서로 바뀌었습니다. 왜 그럴까요?

이는 main()함수에서 swap()함수를 호출할 때 변수 ab를 전달했지만, 실제로는 두 변수 자체가 아닌 두 변수의 값만 전달해서 그렇습니다. 변수의 주소를 출력해서 무슨 뜻인지 확인해 봅시다.

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); 
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.