이것저것 공부기록

WEEK_7 과제 1 참조 본문

언어/C++ 스터디

WEEK_7 과제 1 참조

채도리 2020. 7. 27. 18:16

참조가 등장한 이유

C와 달리 C++에서 '참조'라는 개념이 왜 생겼는지 궁금해져서 그것부터 찾아보았다.

 

레퍼런스는 포인터를 잘못 사용해서 생기는 수많은 재앙과도 같은 문제들을 최소화하기 등장했다.

(https://gracefulprograming.tistory.com/11)

 

 

작성자분의 개인적인 견해일수도 있지만, 나중에 도움이 될 수도 있을 것 같아 첨부해놓는다.

(NULL 허용 여부가 프로그램 설계에 어떤 영향을 미치는지 등 아직 모르는 부분이 많다.)

 

 

포인터와 참조의 차이점

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

포인터는 선언 후 나중에 값을 할당해도 되지만, 참조자는 반드시 선언과 동시에 초기화해야 한다.

이는 NULL 값의 할당 가능 여부와도 관련이 있다.

 

널 포인터는 말 그대로 NULL이 들어있는 포인터이며, 아무것도 가리키지 않는 상태의 포인터이다.

포인터 사용 시 반드시 초기화를 해야되는 건 아니지만, 쓰레기 값을 가지고 있는 것이 나중에 문제가 되는 경우가 생길 수 있어 사용하고, 어떤 주소를 가리키고 있다가 더이상 가리키고 싶지 않을때도 사용할 수 있다.

 

반면, 참조자는 어떤 변수의 별명(또다른 이름)이기 때문에, 별명을 붙일 대상이 존재하지 않는다면 별명을 붙이는 행위 자체가 불가능하다. 따라서 NULL로 초기화할 수 없을 뿐더러, 초기화하지 않는 것도 불가능하다.

 

2. 포인터는 주소값을, 참조자는 변수를 담고 있다.

포인터는 &(ampersand)와 *(asterisk)를 사용한다. 위의 코드에서는 ptr이라는 포인터 변수에 num2의 주소값을 저장한다.

참조자는 포인터와 달리 그냥 변수명 써서 초기화한다. 이는 변수의 '값' 혹은 '주소'를 담는 것이 아니기 때문이다. (라고 생각하기로 했다.)

'언어 > C++ 스터디' 카테고리의 다른 글

알고리즘 기수스터디 - 하노이 탑  (0) 2020.07.22
WEEK_3 과제 1 포인터  (0) 2020.05.22
WEEK_2 과제2 별 찍기 시스템  (0) 2020.05.17
WEEK_1 과제3 C++ 기초  (0) 2020.04.12