강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

jsh4059님의 프로필 이미지
jsh4059

작성한 질문수

홍정모의 따라하며 배우는 C++

6.14 참조 변수 reference variable

6.14 참조변수 질문

작성

·

187

0

void printElements(int (&arr)[5])

for(int i=0;i<5;i++)

{

cout<<arr[i]<<" ";

}

cout<<endl;

}

int main()

{
const int length =5;

int arr[length]={1,2,3,4,5};

printElements(arr);

return 0;

}

reference 가 parameter 로 받을때는 다르게 쓰이는건가요?

int value=5;

int &ref =&value; 여기서는 선생님이 ref 는 별명이니까 원래값이 있어야하므로 반드시 초기화를 해줘야된다 하셨는데 void printElements(int (&arr)[5]) 여기서는 다르게 쓰이는거 같네요 어떻게 쓰이는건가요?

답변 1

3

안녕하세요.

함수의 매개변수는 함수가 호출되어 파라미터를 대입 받을 때 비로소 메모리를 할당받게 됩니다. 

 void printElements(int (&arr)[5]) 이 상태로는 아직 메모리를 할당 받은 것이 아니기 때문에 문제 없습니다. 이건 이 함수의 프로토타입을 정의해준 것 뿐이지 메모리를 정의해주는 행위는 아니기 때문입니다. 

printElements(arr); 호출이 일어나면 printElements 함수의 참조 매개변수인 arr에, 파라미터로 넘긴 main 함수의 arr 가 대입됩니다. 즉 int (&arr)[5] = arr; 가 실행되는 것입니다. (파라미터로 넘긴 arr을 매개변수 arr로도 접근할 수 있게 됩니다. 별명이 되었기 때문이죠)

따라서  void printElements(int (&arr)[5])  이런건 그냥 이 함수는 이렇게 생겼습니다. 하고 정한 것 뿐이고 메모리를 차지하고 있는 행위가 아닙니다. (int (&arr)[5] 이 상태로는 어떤 메모리를 차지하는 그런 선언이 아닙니다. 그래서 문제 없습니다.

함수 호출이 일어나야 그제서야 매개 변수에 대입이 일어나면서 매개 변수 선언과 초기화가 이루어지는 것입니다. 

jsh4059님의 프로필 이미지
jsh4059

작성한 질문수

질문하기