1. 레퍼런스 개념
#include <iostream>
int main() {
int a = 3;
int& ref = a; // 참조자(reference) --> a = ref와 같은 느낌
ref = 5;
std::cout << "a : " << a << std::endl;
std::cout << "ref : " << ref << std::endl;
return 0;
}
실행 결과
a : 5
ref : 5
2. 함수 인자 레퍼런스
#include <iostream>
//함수 인자 레퍼런스
int ref_func(int &p) { // int &p = ref
p = 10;
return 0;
}
int main() {
int ref = 1;
std::cout << ref << std::endl;
ref_func(ref); // ref 앞에 &붙일 필요 x
std::cout << ref << std::endl;
}
실행 결과
1
10
3. 상수 참조자
#include <iostream>
int main() {
const int &ref = 5; // 상수(리터럴) 참조 방법
int num = ref;
std::cout << ref << std::endl;
std::cout << num << std::endl;
}
실행 결과
5
5
4. 배열 레퍼런스
#include <iostream>
int main() {
int arr[2] = {3, 5};
int(&ref)[2] = arr; // 배열 참조 방법, arr의 크기와 맞춰줘야함.
std::cout << arr[0] << arr[1] << std::endl;
for(int i=0; i<2; i++){
ref[i] = i;
}
std::cout << arr[0] << arr[1] << std::endl;
return 0;
}
실행 결과
35
01
5. 함수의 레퍼런스 리턴
#include <iostream>
int& ref_func(int& a) { // 참조 함수
a = 5;
return a;
}
int main() {
int b = 2;
int c = ref_func(b); // 함수의 a는 b를 참조, ref_func은 5를 반환
std::cout << c << std::endl;
return 0;
}
실행 결과
5
포인터 대신 레퍼런스를 쓰는 이유?
- 포인터 쓸 때 보다 코드가 깔끔해짐.
- 레퍼런스는 메모리를 건드리지 않아서 실수로 메모리를 수정하는 일을 방지할 수 있음.
참조
[C++] 포인터 대신 참조자(reference)를 써야하는 경우는 ?
코딩테스트 준비를 C++로 하겠다고 마음먹고 문법 공부에 뛰어들자마자 참조자를 만났다. 생각보다 헷갈리는 부분이 많아서 나름대로 정리를 해봤다. 목차 1. 함수를 사용함에 있어서의 참조자 2
lecor.tistory.com
씹어먹는 C++ - <2. C++ 참조자(레퍼런스)의 도입>
modoocode.com