‘x의 값은 2, y의 값은 1’이라고 출력될 줄 알았는데 x, y의 값이 바뀌지 않고 원래 값으로 출력되었습니다. 원인이 무엇일까요?
main() 함수 안에서 swap() 함수를 호출하고 main() 함수의 매개변수 x, y에 의해 각각 1과 2의 값이 전달되었습니다. 그리고 swap() 함수의 지역 변수 x와 y 값에 각각 1과 2가 복사됩니다. main() 함수의 x, y는 swap() 함수의 x, y와 이름만 같을 뿐 각 함수 안에서만 사용되는 지역 변수, 즉 서로 다른 변수입니다.
따라서 값을 전달받은 후 swap() 함수 안에 있는 명령문을 차례로 수행하면서 x = 2, y = 1이 됩니다. x와 y는 swap() 함수 안에서 사용되고 소멸되는 지역 변수이므로 swap() 함수의 수행이 완료되면서 메모리에서 x와 y 변수는 사라집니다. 물론 swap() 함수 안의 x, y 값이 소멸되지 않는다 하더라도, x와 y의 출력 값은 변경되지 않으며 각각 1, 2의 값을 그대로 가집니다. 역시 main() 함수와 swap() 함수의 x, y는 전혀 다른 변수이기 때문입니다.
그림 8-11 | x와 y의 값이 바뀌지 않은 이유