C++/공부

C++] 기초(7) - 참조자(Reference)

tislqhf 2016. 12. 8. 21:58
반응형

** 본 게시물은 C++을 복습하며 정리하는 글입니다. 틀린 부분이 있다면 지적 부탁드립니다!! 현재 "윤성우의 열혈강의 C++"교재로 공부중이며 좀 더 상세한 설명을 원하시는 경우에는 책을 구매해서 찾아보시길 권장합니다.




[들어가기 전]


C언어에서 포인터의 개념을 습득하였을 것이다. 참조자는 성격상 포인터와 유사하다고 생각할 수 있다. 그러나 참조자는 포인터를 모르는 사람도 충분히 이해할 수 있으므로 포인터와 굳이 비교해서 머리아파하지 말자.


(Reference의 등장배경)

변수는 할당된 메모리 공간에 붙여진 이름이며, 그 이름을 통해 해당 메모리에 접근할 수 있다. 근데 같은 메모리 공간에 다른 이름(변수)으로 접근할 수 없을까?? 이렇게 등장한 것이 바로 "Reference(참조자)"이다.


쉽게 설명하자면, 'int nVal1 =7;'이라고 메모리에 7을 저장한 nVal1 변수를 선언했다고 가정하자. 우리는 7이라는 숫자가 저장된 메모리공간에 접근하기 위하여 nVal1이라는 변수를 사용할 것이다. 근데 nVal1외에도 다른 이름으로 해당 메모리에 접근하고 싶다. 

그럴경우 'int &nVal2 = nVal1;' 이라고 명시하면 7이 저장된 메모리공간에 nVal2라는 변수명으로 접근할 수 있다. 여기서 &연산자는 주소 값을 반환하는 역할 외에도 다른 역할로 사용됨을 알 수 있다.


1)

int nVal1 = 7;

int &Val2 = nVal1;


 nVal1 / nVal2

 (메모리공간)

7


2) (참조자는 하나의 변수에 여러개를 사용할 수 있다.)
int nVal1 = 10;

int &nVal2 = nVal1;

int &nVal3 = nVal1;


 nVal1 / nVal2 / nVal3

 (메모리공간)

10



이런 그림으로 상상하면 이해가 쉽다. (결국 변수에 별칭하나를 더 붙여주는 것이다.)




[예제]


ex)


출력결과)

nVal : 7

ref1 : 7

ref2 : 7

ref3 : 7




[추가]


1) 참조자의 선언 범위


변수와는 다르게 참조자는 선언과 동시에 누군가를 가리켜야 한다. 예를 들면

"int &ref;"처럼 선언만 하면 안된다는 것이다.


불가한 코드)

int &ref;  (x)

int &ref = 20; (x)

int &ref = NULL; (x)


그러나 배열의 요소는 참조할 수 있다. 배열은 메모리상에 접근하기 위한 변수들의 연속된 집합이므로 참조자로 가리키는 것이 가능하다.


ex)


출력결과)

refArr1 : 1

refArr2 : 2

refArr3 : 3





반응형