• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

6.14 참조변수 질문

21.01.12 23:05 작성 조회수 111

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

답변을 작성해보세요.

2

안소님의 프로필

안소

2021.01.13

안녕하세요.

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

 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] 이 상태로는 어떤 메모리를 차지하는 그런 선언이 아닙니다. 그래서 문제 없습니다.

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