1. 편의성 측면
참조가 포인터보다 더 간단하지만
참조 방법을 이용하면 원본의 값을 수정하는지 아닌지 알기 어려움
PrintInfo(&info);
PrintInfo(info);
위에서 첫 줄은 PrintInfo가 info의 주소값을 직접 찾아가 원본 값을 수정한다는 것을 알 수 있지만
두번째 줄은 PrintInfo가 info의 원본 값을 수정하는지 아닌지 알 수 없음.
(추가) 어떤 값을 수정하지 못하게 하려면 const 문법을 사용할 수 있다.
void PrintInfo(const StatInfo& info)
{
// ---------------------------------
}
(추가 2) 포인터 문법에서 const의 위치에 따라서 용법이 달라질 수 있다.
(1) 스타 앞에 붙는 경우
void PrintInfo(const StatInfo* info)
{
//---------------------------------
}
info가 가리키는 값을 바꿀 수 없게 함.
(2) 스타 뒤에 붙는 경우
void PrintInfo(StatInfo* const info)
{
//---------------------------------
info = &GlobalInfo // 작동하지 않음
}
info가 가리키는 주소값을 바꿀 수 없게 함.
2. 초기화 여부
참조 방식은 참조하는 대상이 없으면 안됨.
(무언가를 참조하고 있어야 함)
StatInfo& refer;
refer = info;
PrintInfo(refer);
// "오류 발생 !!"
StatInfo& refer = info;
PrintInfo(refer);
(추가) 포인터가 어떤 값도 가리키지 않으려면?
StatInfo* ptr = nullptr;
이 상태에서 해당 포인터를 사용하면 오류가 발생함.
어떤 조건을 만족하는 것을 찾지 못할 때 nullptr을 사용할 수 있음.
단, 참조 방식은 nullptr을 사용할 수 없다.
3. 포인터로 사용하던 것을 참조로 넘겨주거나, 참조로 사용하던 것을 포인터로 넘겨주려면?
(1) 포인터 -> 참조
PrintInfoByRef(*ptr);
// PrintInfoByRef(refer);
ptr의 값을 참조한다.
(2) 참조 -> 포인터
PrintInfoByPtr(&refer);
// PrintInfoByPtr(ptr);
refer의 주소값을 참조한다.
'기초 C++ 스터디' 카테고리의 다른 글
4-7. 포인터 vs 배열 (0) | 2023.05.22 |
---|---|
4-6. 배열 (0) | 2023.05.22 |
4-4. 참조 (0) | 2023.05.11 |
4-2. 포인터 연산 (0) | 2023.05.11 |
4-1. 포인터 (0) | 2023.05.11 |