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의 배열에 값을 가리키게 된다.
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 |