6.14 참조변수 질문
192
작성한 질문수 34
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] 이 상태로는 어떤 메모리를 차지하는 그런 선언이 아닙니다. 그래서 문제 없습니다.
함수 호출이 일어나야 그제서야 매개 변수에 대입이 일어나면서 매개 변수 선언과 초기화가 이루어지는 것입니다.
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
463
1
메모리 주소 10진수로 출력
1
653
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
497
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
533
1
메모리 주소에 관한 질분
0
678
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
548
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
442
1
Digit 뒤에 reference를 사용하는 이유
0
509
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
322
1
dat파일이...
0
537
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
642
1
복사 생성자 관련 질문이 있습니다.
0
453
1
수업 중 궁금한점이 있습니다.
1
388
1
라이브러리자체가 이해가 되지 않습니다.
0
560
1
마지막 예제 질문
0
301
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
373
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
410
1
friend함수 관련 질문이 있습니다.
0
310
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
446
1
3분 17초 질문
0
350
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
445
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
441
2
const Something &st에서 const를 빼면 안되나요?
0
299
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
491
1





