본문 바로가기

프로그래밍/C++

C++ 포인터와 참조의 차이



포인터와 참조자의 공통점은 다른 객체(변수)를 간접적으로 참조하는 역할을 하지만


몇가지 차이가 존재하는데, 다음과 같다.





* 참조자는 선언과 동시에 초기화를 해야 한다.


* 초기화 시, 참조자는 값(value)을 직접 입력받고, 포인터는 값(value)의 주소값을 입력받는다.

 

* 클래스 멤버 접근 시, 참조자는 "."을 사용하고 포인터는 "->"를 사용한다.



* 포인터는 nullptr 값을 가질 수 있지만 참조자는 nullptr  값을 가질 수 없다. 


다시 말하면 참조자는 nullptr과 같은 유효검사를 할 수 없다.


이것이 바로 참조대신에 포인터를 사용하는 가장 큰 이유일 것이다.



* 참조자는 한번 가리킨 대상을 변경할 수 없지만, 포인터는 자신이 가리키는 대상을 언제든지 변경할 수 있다.


string oldNumber("100");

string newNumber("200");


string & rs = oldNumber;    // 초기화.

rs = newNumber;          


참조하는 대상을 변경하는 게 아니라 원래 참조하던 oldNumber객체의 값을 바꾼다.


=> oldNumber의 값이 바뀌게 된다






=> 전달하는 매개변수가 nullptr이 될 수 없으면, 사실 웬만하면 const reference 형태로 하는 것이 좋다.