본문 바로가기

C++

참조형 변수

반응형

1. 별명 같은거라고 생각하면 됨
int a=3;
int&b =a;
b=4; // a=4 과 같음

  • 고로 참조형은 생성 시 초기화가 필요함, 클래스 매개변수는 예외(생성자에서 초기화 해주도록 하기위함)

2. 포인터와 차별점
 2.1 포인터는 주소, 참조형은 값
: 포인터는 4byte로 주소를 담을 수 있는 공간을 생성하여, 해당 변수의 주소 값을 받아오는 간접형식이라면, 참조형은 해당 변수의 값을 받아오며 참조형의 주소를 구하였을 때, 참조된 변수의 주소를 반환하며 참조된 변수와 동일하다고 생각하면 됨. 고로, 매개변수를 사용할 시 주로 사용 됨

 

3. 매개변수로 사용 시 이점

  3.1 call by reference
매개변수로 사용 시 call by value 가 아닌 call by reference로 함수 내부에도 해당 값을 변경하면 함수 내부에서 뿐 아니라 실질적인 해당 매개변수의 값이 변경이 된다.
  3.2 간략한 코드
call by reference 의 경우 c++에서는 포인터도 동일하게 적용할 수 있지만 역참조 등이 없어도 되니 포인터에 비해 간략하다

 

 

 

예시

 

void swap(int &a,int &b){
int temp = a;
a=b;
b=temp;
}

 

 

이해를 돕기 위한 예제

 

int* foo;
int*& bar = foo;            //포인터 foo의 주소로 초기화.
bar = new int;
*bar = 5;

printf("0x%p \n", &foo);    //포인터 foo의 주소
printf("0x%p \n", &bar);    //참조형 변수 bar의 주소
printf("0x%p \n", *&bar);    //참조형 변수 bar가 가리키는 값
printf("0x%p \n", bar);        //참조형 변수 bar가 가리키는 주소
printf("0x%p \n", foo);        //foo가 가리키는 동적할당된 공간의 주소

printf("0x%p \n", **&bar);    //참조형 변수 bar가 가리키는 값의 값

반응형

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

가상 함수  (0) 2019.12.11
C++ 언어의 특징  (0) 2019.11.13
인터페이스 vs 추상화  (0) 2019.10.30
탬플릿  (0) 2019.10.30