Ch 09. 함수 - 03. 값으로 전달
우선 내용을 보기전에 하나의 경우를 보자.
이 changer 함수는 int 값 2개를 전달 받아 값을 서로 바꿔주는 함수이다.
이를 main함수로 호출해보자
값이 바뀌지 않았음을 알 수 있다.
왜 값이 바뀌지 않을까?
함수의 전달인자로 값을 전달
이전에 scope에 따라서 값에 접근을 할 수 있는지 할 수 없는지에 대해서도 이야기 했었었다.
보면 main이라는 함수와 changer라는 함수는 각각의 별개의 scope를 가지고 있는데
main이란 함수에서 changer를 호출할때 a와 b를 전달해줬는데 이는 사실 a, b 자체를 직접 전달한게 아니라 a와 b의 값을 전달해주는 것으로 사실상
이것과 동일하다고 생각하면 된다.
과정을 조금 상세하게 보자면 먼저 main함수가 실행되면서
지역변수인 두 변수가 스택에 올라가게 된다.
그리고 나서
이 함수가 호출되면 a와 b는 복사 되어서
이 함수의 매개변수로 스택에 int a와 int b에 각각 순서대로 저장되게 된다.
그리고 이 함수가 종료되면 changer 함수 내부에서 생성된 a, b는 스택에서 지워지고 main에서는
이 부분에서 main의 지역 변수인 a와 b를 사용하게 된다.
결국 이미 저 출력문을 부를 때에는 changer 함수는 종료되기에 스택에 올라간 a, b 는 이미 지워진 상태가 되기에 main의 a와 b에는 영향을 주지 않는다.
위에서 봐서 알겠지만 main함수의 int a, int b와 changer함수의 int a와 int b는 완전 동일한 값(주소값을 포함한 모든것)이 아니다.
한번 주소값을 확인해보면
이렇게 main의 a, b와 changer의 a, b 의 주소값이 다른것을 볼 수 있고 이건 각각의 변수가 다른 위치에 존재하는 변수라는걸 확인 시켜준다.
이렇게 값으로 직접 전달하는 경우엔 다른 scope(서로 다른 함수)에서는 영향을 주지 않는다.