반응형
첨에 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++에서는 & 연산자를 이용해서 좀 안전하게
사용 할 수있는것 같다..
그럼 다음기회에...
<과묵,겸손,솔직,성실....>
반응형
'Study > C++' 카테고리의 다른 글
system()...콘솔 환경에서 도스 명령어 날릴때!! (0) | 2011.09.28 |
---|---|
메모리 최적화 함수와 특정프로세의 메모리 사용량 구하기.. (0) | 2011.09.28 |
RegQueryValueEx로 값이 구해지지 않는다?? (0) | 2011.09.28 |
new & delete (0) | 2011.09.28 |
각종 문자열 바꾸기~~ (0) | 2011.03.30 |
댓글