본문 바로가기

Language/C & C++

C++ 레퍼런스 <참조자>

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

포인터 대신 레퍼런스를 쓰는 이유?

  • 포인터 쓸 때 보다 코드가 깔끔해짐.
  • 레퍼런스는 메모리를 건드리지 않아서 실수로 메모리를 수정하는 일을 방지할 수 있음. 

 

 

참조

https://lecor.tistory.com/39#:~:text=%EC%9D%B4%EC%99%80%20%EA%B0%99%EC%9D%80%20%EC%B0%B8%EC%A1%B0%EC%9E%90%20%EB%A6%AC%ED%84%B4,%EC%9D%98%20%EC%9E%A5%EC%A0%90%EA%B3%BC%20%EB%8F%99%EC%9D%BC%ED%95%98%EB%8B%A4.

 

[C++] 포인터 대신 참조자(reference)를 써야하는 경우는 ?

코딩테스트 준비를 C++로 하겠다고 마음먹고 문법 공부에 뛰어들자마자 참조자를 만났다. 생각보다 헷갈리는 부분이 많아서 나름대로 정리를 해봤다. 목차 1. 함수를 사용함에 있어서의 참조자 2

lecor.tistory.com

https://modoocode.com/141

 

씹어먹는 C++ - <2. C++ 참조자(레퍼런스)의 도입>

 

modoocode.com