일단 참조에 대해 간단히 알아보면...
참조란? 같은변수의 또 다른 이름이다.
참조가 포인터보다 좋은점은 해제할 필요가 없기 때문에 표기법이 더 단순하고
컴파일러가 참조의 초기화를 강요하므로 골치아픈 포인터 실수를 범할 우려가 적다.
한편, 참조는 포인터보다 더 사용하기 쉽고 더 안전하지만 더 강력하지는 않다.
1. 참조 변수 자체에 값을 변경시킬수 없나요?
- 참조 변수란 어떤 변수의 또다른 이름이라할수있으므로 참조 변수 자체의 값이란 말이 이상하네요.
궂이 그대로 뜻을 보자면...
참조변수 자체라는 말은 참조가 초기화될때 그 초기화시킨 해당 변수가 되겠네요.
2. 독립참조란 무엇인가요?
int iCount = 7;
int& iRef = iCount; // iCount의 참조를 생성
이런걸 독립참조라 부르네요... 그리고 초기화하지 않으면 컴파일러 error가 납니다.
대부분의 번역서들이 "참조변수를 쓸때에는 반드시 초기화해야한다."라고 적어놓아서 처음읽은 이들을
논리적으로 괴롭히지요... 번역서의 늪에 빠지지 말길.. 단순히 컴파일러 오류가 나기때문입니다.
(일단은... ^^ 초기화하지 않은 참조를 어떻게 쓸수있는지 상상해 보시면 답이 나올듯?)
어떤때 이것이 유용할지는 모르겠네요. ^^ 대부분 함수 반환값의 형태가 많으니...
3. 참조는 많은 제약을 가지구 있다는대 그 이유는 무엇인가요?
참조는 처음에도 적었듯이 같은변수의 또다른 이름일 뿐이지 일반 변수처럼 사용되는것이아닙니다.
간단히 보면...
int iCount = 100;
int& i = iCount;
int* j;
j = (int*)i;
int p;
p = (int)j;
ShowMessage( p );
참조 i를 int*로 j에 넣으면 iCount의 주소가 나옵니다. 이 주소를 int로 캐스팅하면 p에는 100이
나옵니다.
이때 나온 주소는 iCount의 주소이지 참조의 주소가아닙니다.
4. 참조 변수 자체에 새로운 값을 치환할수 없기 때문에 독립참조는 선언시에 초기화 되어야 한다고 합니다.
위에서 언급했듯 초기화하지 않으면 컴파일 오류납니다.
이름만 있는것을 컴파일러가 컴파일하고 프로그래머가 그걸 사용한다고보면 참조는 포인터처럼 쓰레기값
이 있어야하는데... 그럼 포인터와 뭐가 달라질까요?
처음부터 이런 늪에 관심을 가지는건 좋은 현상이지만 빠지는건 비추입니다. ^^;
(물론 저도 아직은 해야할게 많은 초보일 뿐이지만... ^^)
참조궁금이 님이 쓰신 글 :
: 참조에 대해 알고 햇갈려 하는 것들입니다.
:
: 1.참조 변수 자체에 값을 변경시킬수 없나요?
:
: 2.독립참조란 무엇인가요?
:
: 3.참조는 많은 제약을 가지구 있다는대 그 이유는 무엇인가요?
: 예를들어 다른 참조를 참조할수 없고 참조의 주소를 얻을 수도 없다 ,참조의 배열을 만들 수도 없으며 ,비트 필드를 참조할 수도 없다.
: 참조가 클래스의 멤버 혹은 반환값 혹은 함수의 매개변수가 아니면 반드시 초기화 되어야 한다..
: 이런것들은 왜 그런가요?>
:
: 4.참조 변수 자체에 새로운 값을 치환할수 없기 때문에 독립참조는 선언시에 초기화 되어야 한다고 합니다.
:
: 그런대.. 예문중에서
: int &ref =x;
: x=10;
: ref=10;
:
: ref=100;
:
: 같이 참조 변수 자체에 새로운 값을 치환하고 있는데
:
: 왜 그런가요?.. 햇갈리내요
:
: 그리고 독립참조의 적절한 사용 은 어떨때인가요?
:
:
|