포인터 : 해당 메모리 주소에 위치한 내용물 (즉, 그 주소 안에 있는 값을 가르킴
그러므로, 포인터 값을 변경하게 되면 그 주소안에 있는 내용물의 값도 변함 ) =⇒ *ptr = num
int num = 10;
int* ptr = # // num 변수의 메모리 주소를 ptr 변수에 저장
//*ptr에는 메모리 주소에 위치한 내용물 값이 저장
*ptr = 20; // num 변수의 값을 20으로 변경
참조 : 포인터의 *대신 &를 쓴다 ? (변수에 대한 별명, 즉… 변수를 부르는 다른 이름) =⇒ ref = num
int num = 10;
int& ref = num; // num 변수의 참조(reference)인 ref 변수를 선언
ref = 20; // num 변수의 값을 20으로 변경
//변수 num이 num 말고 ref라고도 불림
cout << num ; //10 출력
cout << ref ; //10 출력
둘의 가장 큰 특징은 포인터는 변수에 간접 영향, 참조는 직접 영향을 미친다. 포인터는 변수의 주소를 통해 변수에 접근, 참조는 변수 그 자체에 바로 접근하기 때문 !
참조(레퍼런스): 배열 참조
int& arr[2] = {a, b}; //이렇게 특정 인덱스를 참조하는 것은 유효하지 않다.
int arr[3] = {1, 2, 3};
int(&ref)[3] = arr; //배열 전체를 참조하는 것은 가능하다
ref[0] = 2; //이렇게 접근해서 배열값 변경 가능