포인터는 원래 c언어부터 존재해서 개념을 어느정도 알고있지만 참조는 c++에서 생겨난 것이기 때문에 처음 들어봤다.
일단 포인터는 변수의 주소를 가리키며 변수명 앞이나 타입 뒤에 *
을 붙여 사용한다.
int* p
혹은 int *p
포인터에 주소를 넣을 때는 &
를 사용해 값을 넣어주고 대입과 복사가 가능하다.
또한 포인터 하나가 여러 객체를 가리킬 수 있다.
참조는 포인터와 약간 다르다.
해당 변수에 대해 다른이름을 선언하는 것이다.
변수 p에 별명이 pa라고 생긴 것이라고 생각하면 이해하기 빠르다.
그러면 pa에 값을 넣으면 p에도 똑같은 값이 들어가게 된다.
참조변수는 &
가 변수의 왼쪽에 있다.
int &p
포인터는 하나가 여러객체를 가리킬 수 있지만 참조는 불가능하다.
오직 하나의 변수만 참조가 가능하고 다른 변수는 참조가 불가능하다.
참조자의 타입과 참조되는 변수의 타입은 무조건 같아야한다.
또 참조자는 오직 객체와 결합할 수 있다.
포인터가 가리키는 변수와 포인터의 타입이 같더라도 포인터 변수의 주소값과 대상의 주소값은 다르지만 참조는 모두 같다.
변수 int a
포인터 int *pa
&a != &pa
a == &pa
변수 int a
참조변수 int &re
&a == &pa
a == &pa