• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

값으로 전달에 대해 질문드립니다.

20.02.05 00:27 작성 조회수 101

0

안녕하세요?

using namespace std;

void doSomething(int x)

{

cout << "In func " << x << " " << &x << endl;

}

int main()

{

doSomething(5);

doSomething(6);

int x = 6;

cout << "In main " << x << " " << &x << endl;

doSomething(x); // 6이 argument로써 parameter로 전달됨

doSomething(x + 1);

return 0;

}

결과

In func 5 010FF9F4

In func 6 010FF9F4

In main 6 010FFAC8

In func 6 010FF9F4

In func 7 010FF9F4

위 코드 진행과정이

1. doSomething(5)를 실행하면 매개 변수 x가 생성되고 값 5가 복사된다.

2. cout을 실행한다.

3. 매개 변수는 지역 변수이므로 doSomething함수가 종료되면서 사라진다.

4. doSomething(6)을 실행하며 위 과정을 반복한다.

이렇게 되는데, 3번에서 4번으로 넘어가면서 매개 변수가 사라지잖아요? 그런데 doSomething(6)을

실행하면 x의 메모리가 doSomething(5)에서의 메모리와 같고 인수가 무슨 값이 복사되든 메모리 주소가 동일한 결과를 얻었습니다.

제가 처음에 생각했을 때는 doSomething(6)이 실행되면서 또 매개 변수가 선언되니까  기존의 doSomething(5)와 다른 메모리 주소를 사용할 거라 생각했는데 그게 아니네요.

애초에 OS에서 인수값으로 무슨 값이 들어오든 너는 이 메모리 주소를 할당 해줄테니까 이 주소만써 이렇게 명령하고 그 메모리 주소를 기억하고 있는건가요?

아니면 x의 주소를 기억하는 포인터가 생성되면서 x는 함수가 종료되면서 사라지더라도 x의 메모리 주소를 기억하는 포인터를 통해 x의 주소를 기억해내는 건가요?

궁금한게 너무 많네요.. ㅜㅜ 

답변 1

답변을 작성해보세요.

0

궁금한게 많으시면 빨리 배웁니다.

스택일 경우에는 함수 밖에 나갔다가 다시 들어왔을 때 같은 주소의 메모리가 배정될 가능성이 높습니다. 

쌓았다가 뺐다가 다시 쌓는 구조이기 때문입니다. (C언어 강의 범위입니다)

질문 요령은 아래 참고해주세요.

https://blog.naver.com/atelierjpro/221547580916