인프런 커뮤니티 질문&답변

nova020510님의 프로필 이미지

작성한 질문수

[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문

참조 변수

참조변수 질문이요

해결된 질문

작성

·

434

4

참조변수는 어떤경우에 쓰는거고 포인터변수로 swap하는거랑 차이점이 뭔가요??

답변 2

3

판다코딩님의 프로필 이미지
판다코딩
지식공유자

참조변수를 어떤 변수를 사용하고자 할 때 사용한다고 이해하시기 보다는,

포인터는 주소값을 할당하고, 참조변수는 대상(객체)를 직접 할당 한다고 이해하시는 것이 좋을 것 같습니다.

int a = 10; 
int *p = &a; // 포인터는 주소값을 할당 
int &r = a; // 레퍼런스(참조)는 대상을 직접 할당

포인터의 정의를 다시 살펴보면, 포인터는 메모리의 주소를 가지고 있는 변수이고

참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름입니다.

즉, 변수에 별명과도 같은 별칭을 붙여주는 것입니다.

포인터변수와 참조로 swap하는 것에 표면적으로 드러나는 차이점은 없습니다.

이번 제 강의에서는 메모리와 관련된 내용을 다루지 않기에 간단하게 넘어갔는데요.

포인터 변수와 참조 변수의 차이점에 관해서만 간단하게 보충해드리면,

1. 포인터는 NULL로 초기화할 수 있지만 참조는 NULL 초기화를 할 수 없다.

int* p = nullptr;
int& r = nullptr // error

2. 포인터는 주소 값을 저장하기 위해 메모리 공간을 소모하지만,

참조는 같은 메모리 공간을 참조하므로 추가적으로 메모리 공간을 소모하지 않는다.

3. 포인터를 매개변수로 함수 인자 전달 시 메모리 소모가 일어나고, 값 복사가 일어나지만 참조로 함수 인자를 전달할 시 메모리 소모가 없고 값 복사 또한 발생하지 않는다.

로 정리할 수 있을 것 같습니다.

그래서 질문에 대한 답변을 드리자면,

포인터로 인한 값을 변화하였을 때 함수 내부적으로 값이 복사되는 과정이 있었냐 없었냐로

참조로 swap과 포인터 변수의 swap의 차이점을 말씀드릴 수 있을 것 같습니다.

(따라서 참조 변수를 가장 많이 사용하는 순간도 함수에 매개변수로 값을 넘겨줄 때 입니다!)

2

nova020510님의 프로필 이미지
nova020510
질문자

와 친절한 설명 너무 감사합니다~ 강의 잘보고 있어요!