포인터(Pointer)란
메모리의 주소값을 저장하는 변수
데이터타입* 변수명; // 문법
int n = 10;
int* ptr_a;
int* ptr_b = &n; // 포인터 변수 선언과 동시에 변수 n의 주소값을 대입해 초기화
참조자(Reference)란
특정 변수의 실제 이름 대신 사용하는 변수
데이터타입& 변수명; // 문법
int n = 10;
int& ref = n; // 참조자 선언과 동시에 변수 n을 대입해 초기화
참조자를 선언할 때의 주의사항
1. 참조자의 타입은 대상이 되는 변수의 타입과 동일해야 함
2. 선언과 동시에 초기화되어야 함
3. 한 번 초기화되면 대상을 바꿀 수 없음
포인터와 참조자의 차이
1. NULL 값 보유 가능 여부
포인터는 선언할 때 주소를 할당하지 않아도 돼 NULL 값을 가질 수 있지만 참조자는 선언과 동시에 주소를 할당해줘야 하기 때문에 NULL 값을 가질 수 없다.
2. 매개변수로 전달했을 때의 메모리 공간 차지 여부
함수의 매개변수로 포인터를 사용할 시 포인터의 주소를 전달한다. 전달 받은 주소를 새로운 포인터에 복사하는 것이기 때문에 새로운 메모리 공간이 필요하다. 참조자의 경우에는 함수 호출 시 값을 전달하기 때문에 추가적인 메모리 공간이 필요하지 않다.
3. 객체 변경 가능 여부
포인터는 *연산자를 이용해 지정한 객체를 변경할 수 있지만 참조자는 객체를 변경할 수 없다.
'c++' 카테고리의 다른 글
[자료구조] 스택 구현하기 - Stack (0) | 2023.06.13 |
---|---|
[C++] 스마트 포인터 - unique_ptr, shared_ptr, weak_ptr (0) | 2023.06.09 |
[C++] 가상 함수 - virtual (0) | 2023.06.08 |
[C++] 객체 지향 프로그래밍(OOP, Object Oriented Programming) (0) | 2023.06.08 |
[C++] Call by value, Call by reference (0) | 2023.06.07 |
댓글