상세 컨텐츠

본문 제목

Ch05. C++ 참조자

C++

by javadocq 2024. 1. 4. 14:32

본문

728x90

C언어에서 포인터를 이용해 변수를 가리켜서 이용하였는데 C++에서 도입된 참조자(레퍼런스)라는 방법으로 변수나 상수를 가리키는 방법이 하나 더 있다. 일반 변수의 참조자는 물론 포인터의 참조자도 만들 수 있다. 참조자를 만드는 법은 가리키고자 하는 타입 뒤에 &를 붙이면 된다. 다음 예시를 보며 같이 살펴보자.

 

#include<iostream>

int main() {
 int number = 10;
 int& number_reference = number;

 std::cout << number_reference << std::endl;

 number_reference = 15;

 std::cout << number << std::endl;
 return 0;
}

 

int 형 타입의 number 변수에 10이라는 값을 넣어 초기화 시켜주었다. 이후 number_reference 참조자를 만들어서 number를 가리키게 선언했다면 포인터와 같은 기능을 구사할 수 있다. number_refrence의 값을 수정해도 number의 값이 변하는 것을 다음 실행결과에서 확인 가능하다.

 

 

레퍼런스는 포인터와 다르게 재정의(overriding), 즉 여러 번 초기화가 불가능하다.

&a_reference = a;

&a_reference = b; 

위와 같이 코드를 구성하게 될 경우 오류가 뜬다는 것이다.

 

이번에는 함수에서 참조자를 인수로 받을 때를 보도록 하자

 

#include<iostream>

int add(int& x, int& y) {
 return x + y;
}

int main() {
 int a = 3; 
 int b = 5;

 int c = add(a, b);
 std::cout << c << std::endl;

 return 0;
}

 

포인터를 인수로 받을 때는 넘기는 변수에서 & 기호를 붙였어야 했지만 참조자를 선언할 때도 선언할 변수에만 기호를 붙이기 때문에 여기서는 그냥 a,b 인자만 넘기면 된다.

이중 포인터, 삼중 포인터 같이 참조자도 중첩이 가능하니 참고해서 이용할 수 있도록 하자.

 

#include<iostream>

int main() {
 const int& reference = 5;
 reference = 6;

 return 0;
}

 

 

다음은 상수 참조자의 대한 내용이다. 기본적으로 상수에 대한 값으로 참조자를 생성을 할 수는 없다. 만약 그렇게 되면 상수의 값을 변경이 가능하다는 것인데 이것은 말도 안되기 때문이다. 하지만 참조자 변수를 선언할 때 const를 붙여서 참조자 자체를 상수로 만들면은 상수를 가리키는 참조자 생성이 가능하다. 물론 값은 변경이 불가능하다는 것을 알아두자.

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

참조자 배열

 

기본적으로 참조자는 메모리를 차지하지 않기 때문에 일반적인 방법으로 배열을 받는 것은 불가능하다.

그래서 다음과 같이 배열을 선언하고 참조자를 선언하면 오류가 뜬다.

 

int a, b;
int& arr[2] = {a, b};

 

그렇다면 어떻게 배열을 참조할 수 있을까?

 

 

#include <iostream>


int main() {
 int arr[3] = {1, 2, 3};
 int(&ref)[3] = arr;
 ref[0] = 2;
 ref[1] = 3;
 ref[2] = 1;
 std::cout << arr[0] << arr[1] << arr[2] << std::endl;
return 0

 

(&ref)[3] = arr; 을 통해서 참조자를 배열을 가리키게 한다. 이때, 주의할 점은 배열의 크기를 명시를 해줘야 한다. 

이렇게 하면 참조자 자체가 배열을 가리킴으로써 참조자의 배열이 각각 arr의 배열에 값을 가리키게 된다.

 

 

'C++' 카테고리의 다른 글

Ch07. C++ 클래스  (0) 2024.01.11
Ch06. C++ new와 delete  (2) 2024.01.04
Ch04. C++ switch-case문  (2) 2024.01.02
Ch03. C++ 반복문/조건문  (2) 2024.01.02
Ch02. C++ 변수 선언  (0) 2024.01.02

관련글 더보기