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


void swap(int *a, int *b){
 int temp=*a; 
 *a=*b;
 *b=temp;
}

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

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

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

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

  • 2017년 08월 01일에 작성됨

조회수 151


1 답변


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

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

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

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

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

  • 2017년 08월 01일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close