(C++) 6.13 포인터와 참조의 멤버 선택 연산자

이준우·2021년 11월 5일
0

포인터와 참조 변수를 사용하였을때 멤버 선택 연산자가 살짝 다르다. 이는 C에서도 사용했던 걸로 기억한다. 어려운 문제는 아니지만 혹시나 해서 작성한다.

  • reference variable를 사용하면 . 을 사용하여 struct의 멤버에 접근한다.
  • pointer을 사용하면 ->을 사용하여 struct의 멤버에 접근한다.

또한, 살짝 헷갈릴 수가 있는 문제가 있다.

pointer와 reference variable은 비슷한 역할을 하지만 initialize를 할 때 살짝 다르다.

예를 들어, pointer의 경우 int *ptr = &x 와 같이 작성을 해주어야 한다. 즉 주소를 넣어주고 있다.

하지만 reference variable 같은 경우 int &ref = x와 같이 변수를 넣어준다. 굳이 int &ref = &x로 넣어줄 이유가 없다. 뭐 넣어도 compile이 error을 발생시키겠지만.. 그 이유는 reference variable에 값을 넣어주면 그 값을 갖고 있는 변수의 주소도 같이 공유되어 들어간다. 그러다 보니 굳이 포인터처럼 주소로 initialize할 필요가 없는 것이다.

이게 생각보다 헷갈리는데, 비슷한 개념이면서도 살짝 다르게 쓰이는 것이 매력 point인듯 싶다.


pointer와 reference variable의 차이점

pointer와 reference variable의 차이점은 다음과 같다.

1.Pointer는 재할당이 되지만 reference의 경우 재할당이 안되고 선언시 초기화 해야한다

2.Pointer는 자체 메모리 주소를 가지지만 reference는 변수와 주소를 공유한다. 그리고 Pointer는 독립된 변수라 재할당 가능하지만 reference는 불가능하다. reference는 할당 변수가 범위에서 사라질때 까지 재할당 할 수 없다

3.Pointer에 경우 널값을 넣을 수 있지만 reference는 그럴 수 없다. reference의 이런 불편한점은 예외처리를 힘들게 한다

4.Pointer의 경우 Pointer에 Pointer에 Pointer를 가져 여러 간접참조를 가질 수 있지만 reference에 경우 단 한 래밸의 간접참조만 할 수 있다

5.Pointer는 Pointer 연산이 가능하지만 reference는 불가능 하다(대신 &변수 reference의 주소연산자를 붙여 주소 +1 이런식으로 계산은 가능하다)

사용용도

reference: 매개변수와 리턴값으로 자주 쓰인다
Pointer:
1. 자료구조에서 연결리스트 이진트리 등등 알고리즘에서 쓰인다
2. 포인터연산,널포인터가 필요할 때 포인터를 쓴다(예를 들어 포인터의 연산이 필요한 배열)

profile
꿈꾸는 CV

0개의 댓글