본문 바로가기
Study/C++

Reference(레퍼런스)...

by 뿡뿡대마왕 2011. 9. 28.
반응형
첨에 C를 하다가 c++을 하다보면 참 이 레퍼런스란 놈이 애매하기가 그지 없었다....
하면서 오잉 이거 뭐여...주소 참조하는건데 뭐가 이렇게 들어와.. 하면서 혼란스러웠다...
근데 &(레퍼런스)연산자가 c++에서는 주소뿐만 아니라 한 변수의 따른 이름으로 사용된다는 것이다.
간단히 예를 들어보면
int aa=10;
int &rf = aa; //요런식으로 선언해준다.
              // int &fr;
             // rf =aa; 이와 같이 선언후 초기화 하는거는 허용되지 않는다..선언과 동시에 초기화를 해줘야 한다.
위와 같이 선언해놓으면
앞으로 aa라는 변수값을 건들일수 있는게 aa라는 변수 말고도 rf라는 변수로도 동일하게 조작 할수 있다.
a++;이 되어 값이 1증가된다고 치면 rf는 aa의 또다른 이름으로 rf값을 출력해도 aa값을 그대로 가지게 된다.
좀 더 자세히 이야기 하자면 aa라는 변수에 값이 10이면 실제 값은 0xAAAAAAA라는 주소(예를 든것임)에 10이 들어있는것이
다.
즉 aa는 메모리 공간의 이름이라고 볼수있다...그 상태에서 &연산자를 이용하게 되면 저 메모리 공간에 aa라는 이름 이외에도
rf라는 이름을 부여할수 있는 것이다..즉 0xAAAAAAAA라는 주소의 이름은 aa와 rf라는 두가지의 이름을 가진다고 볼 수 있는것
이다.
따라서 rf값을 변경하면 저 주소번지에 값이 변경되고 마찬가지로 aa값을 변경해도 저 주소번지 값이 변경되는 것이다.
따라서 다음과 같은 두 함수는 동일하게 볼 수 있다.
 함수 리턴값이 그냥 int형..  함수 리턴값이 int &
 int Test(void)
{
    int a;
    a= 10;
    int & b=a;
    return a;
}
int Test(void)
{
   int a;
   a=10;
   int & b=a;
   return b;
}
리턴 타입이 하나는 int고 하나는 int &지만 차이가 없는 함수이다.  하나의 메모리에 가르키는 이름이 하나 더 추가된 것 일뿐이다.
그럼 다음에는 요놈이 유용하게 쓰이는 모습을 보여주겠다.
즉 Call-by-Reference라는 건데.. 이게 c에서는 포인터를 이용해서 했지만 c++에서는 & 연산자를 이용해서 좀 안전하게 
사용 할 수있는것 같다..
그럼 다음기회에...
<과묵,겸손,솔직,성실....>

반응형

댓글