포인터의 메모리영역에 관하여 궁금합니다!

조회수 1598회
void swap(int *a, int *b){
 int temp=*a; 
 *a=*b;
 *b=temp;
}

이렇게 call by reference 의 예로 자주쓰이는 함수에서 포인터를 이용합니다.

메모리영역에 대해 공부하다가 포인터는 스택영역에 저장이 된다는 것을 알게 되었는데, 그렇다면 메소드를 나오고 나서는 모든 변수가 지워질텐데, 어떻게 값이 바뀌는 것이 main 에서 확인 가능한거죠?

제가 메모리영역에 대한 기반지식이 부족한 탓에 이해를 못하는 것일 수도 있습니다 ㅠㅠ...

혹시 포인터에서 이용하는 주소값이라는 것은 메모리영역과 별개인건가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 포인터가 스택에 저장되는 것이 아니라 파라미터나 지역변수가 스택에 저장됩니다.

    물론 변수들 외에 call opcode 에 의해 복귀 주소도 저장됩니다.(이내용은 윗소스와는 무관합니다.)

    변수가 지워지는데(정확히는 스택이 정리됨)...위 함수가 유효한 이유는 파라미터인 포인터 변수 a, b에 main에서 만든 지역변수의 주소를 넣게 되기 때문입니다.

    즉 main에서 만든 변수의 주소를 swap 함수의 파라미터로 넣게 되므로 swap 함수에서 제거되지 않습니다.

    본래 c언어가 태생적으로 시스템 언어로 설계된 탓에 시스템 구조를 잘 아실 필요가 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)