C에서는 변수에 하나의 이름만 할당할수 있다.
int a=10;
이런식으로 밖에 할당할수 었다.
그러나 C++에는 변수에 다른 이름을 할당할수 있다.
그 역할을 하는 것이 레퍼런스이다.
int a=10;
int &b=a;
하게 되면
a라는 변수값이 저장된 영역에는 a 말고 b라는 이름이 또 할당된다.
포인터는 메모리를 할당 받지만 b는 메모리를 할당 받지 않는다.
선언시에 반드시 초기화되어야 한다.(인수로 사용시 선언 부분에서는 제외)
상수값을 초기화로 사용해서는 않된다.(int &a=10 이런식으로 사용할수 없다)
반드시 변수여야만 한다.
함수의 리턴값을 레퍼런의 초기화할 때도 마찬가지로 적용된다.
int a 변수 선언
int *a 포인터 변수 선언
int &a 레퍼런스 선언
함수의 인수로 레퍼런스를 사용하는 경우는
함수 영역 이외의 값을 변경시킬수 있으므로
Call By Reference로 간주한다.
함수의 지역변수를 레퍼런스로 반환하는 경우
호출자에서 이 지역변수를 참조하려 한다면
어떤 값l이 될지는 보장받을수 없다.
이유는 지역변수이기 때문에 호출 끝내는 사라지는
부분이므로 그 영역에 값은 어떤 값이 될지는 보장받을수는 없다.
'C,C++' 카테고리의 다른 글
this 포인터란 (0) | 2012.09.07 |
---|---|
힙에 메모리 할당.해제 (0) | 2012.08.13 |
메모리 (0) | 2012.07.31 |
const 키워드 (0) | 2012.07.31 |
iostream과 iostream.h (0) | 2012.07.29 |