티스토리 뷰
참조자(Reference)
할당된 하나의 메모리 공간에 다른 이름을 붙이는 것, 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름 (=별명)
포인터와의 차이
- 이미 선언되어 있는 변수에 대해서만 참조자 선언이 가능 = 참조자 선언과 동시에 누군가를 참조해야 한다. = NULL값이 없다
- 한번 지정한 객체를 변경할 수 없다.
int main(void)
{
string str = "hello world";
string* ptr = &str;
string& ref = str;
// str = *ptr = ref
}
위처럼 변수와 참조자를 동시에 선언하여 사용하는 상황보다는, 참조자가 함수에 활용되는 경우가 많다.
함수에 인수를 전달하는 3가지 방법
- 값으로 전달 = 기본 자료형의 값을 전달할 때
- 인수가 해당 함수의 매개변수로 복사되어 전달되기 때문에 인수의 원본은 함수 안에서 수정이 불가능하다.
- 배열, 구조체, 클래스 등을 복사하는 데 큰 비용이 든다.
- 참조로 전달 = 구조체, 클래스를 전달할 때
- 함수가 인수의 값을 변경할 수 있다.
- 인수의 복사본이 만들어지지 않아 큰 구조체나 클래스와 함께 사용하는 경우에도 전달이 빠르다.
- 여러 매개변수를 통해 여러 값을 반환할 수 있다.
- const 를 사용하여 변수가 참조를 통해 변경되지 않는 것을 보장할 수 있다. (읽기전용 함수)
- 주소로 전달
- 포인터가 가리키는 주소가 매개변수로 복사된다. = 값으로 전달된다.
- 주소를 역참조하여 인수의 원본 값을 변경할 수 있다.
'42 > cpp' 카테고리의 다른 글
[C++] NULL 포인터로 객체의 함수가 호출되는 이유 (0) | 2021.07.21 |
---|---|
생성자, 복사생성자, 복사대입연산자, 소멸자 (0) | 2021.05.27 |
메모리구조, 정적할당과 동적할당 (0) | 2021.05.25 |
객체지향, 접근지정자 (0) | 2021.05.25 |
네임스페이스, 표준입출력 (0) | 2021.05.18 |