# Language/C++

[C++] 참조

참조




참조란 무엇인가


1. C 언어에 없는 참조 개념


2. & 기호 사용 (참조자)


3. 참조 변수는 이미 선언된 변수에 대한 별명(alias)


4. 참조 변수, 참조에 의한 호출, 함수의 참조 리턴에 활용

 







참조의 사용








1. 참조 변수


참조 변수는 이미 선언된 변수에 대한 별명, 참조자(&)를 이용하여 선언

반드시 원본 변수로 초기화하여야 함




1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main(void){
    
    int n=2;
    int &refN = n;
    
    Circle circle;
    Circle &refCircle = circle;
    
    return 0;
}
cs



1. n과 refN은 동일한 변수


2. n과 refN은 같은 변수 공간을 공유 (n을 공유)


3. 변수와 참조 변수는 변수 공간을 공유


참조 변수가 선언되면, 참조 변수 이름만 생성되고, 별도의 공간이 할당되지 않음. 초기화로 지정된 원본 변수의 공간을 

공유




참조 변수 선언 시 주의 사항


1. 초기화가 없다면 컴파일 오류 발생

2. 참조자 &의 위치는 무관 (int &refn 또는 int& refn 또는 int & refn)

3. 참조 변수의 배열은 만들 수 없다.

4. 참조 변수에 대한 참조 선언이 가능








2. 참조에 의한 호출(call by reference) ★★★



함수의 매개 변수를 참조 타입으로 선언, 매개 변수가 호출 하는 쪽의 실인자를 참조하여 실인자와 공간을 공유하도록 하는 인자 전달 방식


참조 매개 변수는 스택에 공간을 할당 받지 않는다.


함수의 원형에 의해 구분


코드의 가독성 높임, 간단한 사용


이름만 생성되기에 객체 전달 시에 생성자와 소멸자 모두 실행 안됨.






3. 참조 리턴


C 언어에서 참조가 리턴하도록 허용된 것은 오직 값뿐 ( 기본 타입의 값, 주소 = 포인터)


C++ 에서는 함수가 참조를 리턴할 수 있음


변수 등과 같이 현존하는 공간에 대한 참조의 리턴


공간을 이용 하도록 하는 형태!





1
2
3
4
5
6
7
8
9
10
11
12
char c = 'a';
 
char& find(){
    return c;
}
 
char a = find();
 
char &ref = find();
ref = 'M';
 
find() = 'b';
cs


마지막 줄의 find()로 c의 참조를 리턴하여 변수 c를 'b'로 초기화




728x90