• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

강의를 들으면서 질문이 생겼습니다.

23.11.29 22:37 작성 조회수 123

1

void doSomething(int num)
{   
    cout << (uintptr_t)&num << endl;
    cout << num << endl;
    
    
}

int main()
{   
    int num = 1;

    cout << (uintptr_t)&num << endl;

    cout << num << endl;

    doSomething(num);


    return 0;
} 

안녕하세요. 공부하다가 궁금한게 생겨서 질문드립니다.

배열 뿐만 아니라

정수를 파라미터로 받을 때도 포인터로 받는 것이고

그 포인터에 받은 변수의 주소가 저장이 되어 있는 건가요?

예를들어 main 함수의 num 의 주소와값이 1480 - 1이라고 할때

 

doSomething함수의 num의 주소값은 1436이고 이 주소가 1480 - 1을 담고있는 것일까요??

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2023.11.30

안녕하세요, 답변 도우미 Soobak 입니다.

 

그렇지 않습니다.
해당 경우에는 저장되어 있는 주소의 값은 같지만, 메모리 주소(주소의 값을 저장하고 있는 메모리의 주소)는 다릅니다.

doSomething() 함수의 nummain()num 의 주소를 "담고 있다" 라고 보기보다는, 단순히 그 값의 복사본을 가지고 있다고 이해하시는 것이 옳습니다.

 

해당 부분은 "값에 의한 전달", "참조에 의한 전달", "주소에 의한 전달" 등의 개념으로 좀 더 정확하게 구분되며,
섹션 7 함수 파트의 7.2 값에 의한 전달, 7.3 참조에 의한 인수 전달, 7.4 주소에 의한 인수 전달 강의에서 자세하게 학습하시게 됩니다.