본문 바로가기
프로그래밍/c++

c++ 레퍼런스(Reference)

by -현's- 2013. 6. 13.
반응형


●레퍼런스(Reference)

- 'int &a' 처럼 &를 사용해서 변수를 생성는 것이 레퍼런스이다.('&'는 사용되는 위치에 따라 주소값을 반환 할수도 있고 레퍼런스를 선언할때 사용할 수도 있다.)


- 변수는 메모리 공간에 할당된 이름을 의미한다. 레퍼런스는 이름 있는 메모리 공간에 하나의 이름을 더 붙여주는 것이다.


- 레퍼런스와 변수는 생성되는 방법만 다르고 일단 생성되고 나면 동일한 것이다.


- 아래 두 함수는 동일한 의미를 지닌다

ex)

int function()

{

     int a;

     int &b=a;

     return a;

}


int function()

{

     int a;

     int &b=a;

     return b;

}







●레퍼런스 선언

- 변수는 새로운 메모리 공간에 이름을 부여하지만 레퍼런스는 반드시 이미 이름을 지니고 있는 메모리 공간에 레퍼런스 이름을 부여해야한다.


- 따라서 레퍼런스값에는 상수가 올 수 없고 변수 이름이 와야한다.


- 레퍼런스는 선언과 동시에 반드시 초기화되어야 한다.


ex)

int a=10; 


int &b=10  (x)   //레퍼런스는 상수값으로 초기화 할 수 없다.


int &c=a   (o)


int &d;      (x)   //레퍼런스는 선언과 동시에 초기화 해야한다.








●레퍼런스 call by reference

- 함수 내에서 외부에 존재하는 변수에 직접 접근을 하기 위해 reference를 사용한다.

ex)








- 함수의 인자를 레퍼런스로 받고 있다. val1, val2 메모리 공간에 레퍼런스로 선언한 a,b가 메모리 이름으로 붙게 된다. 













●간혹 실수로 레퍼런스의 값을 변경해서 원본 값 변경될 때가 있다. 이것을 방지하기 위해 레퍼런스 선언 앞에 'const'를 붙여줘서 레퍼런스를 상수화 해준다. 그러면 레퍼런스 값 변경을 통해서 데이터가 조작되지 않는다. 만약 실수로 조작하는 코드가 삽압되면 에러 메시지가 발생한다. 











●지역변수는 레퍼런스로 리턴해선 안된다. 함수가 끝나면 지역변수도 사라져 버리기 때문이다.


ex) reference를 잘못 사용한 예제


#include <iostream>


int& function()

{

int a=16;

return a;

}


int main(void)

{

int &ref=function();

std::cout<<ref<<std::endl;

getchar();

return 0;

}







반응형

'프로그래밍 > c++' 카테고리의 다른 글

c++ 클래스(class) 2  (0) 2013.06.17
c++ 클래스(class) 1  (0) 2013.06.16
c++ 네임스페이스(namespace)  (0) 2013.06.12
c++ 매크로 함수, 인라인(inline) 함수  (0) 2013.06.12
c++ 디폴트 매개 변수  (0) 2013.06.12

댓글