inflearn logo
강의

Course

Instructor

[10 minutes a day | C++] Introduction to C++ programming that anyone can easily learn

Reference variable

참조변수 질문이요

Resolved

608

choing

41 asked

4

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

c++ 참조변수 C++ 포인터

Answer 2

3

pandacoding

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

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

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

choing

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

포인터 문자열 할당시 +1해주는 이유

0

673

1

null 문자가 포함되면 왜 뒤에 불필요한 것들이 사라지나요?

0

563

1

강의 중 궁금한게 있습니다.

0

405

0

포인터 연산 강의

0

374

1

강의중 궁금한 내용이 있습니다

2

492

3

(int*)이 어떤 원리인건지 잘 이해가 안되요 ㅜ

1

458

0

char형과 char 배열을 차이점이 뭔가요

0

390

0

오토를 맹신하지 말라는 것이 무슨 뜻인가요?

0

334

1

안녕하세요 class의 멤버함수에 관련하여 질문이 있습니다.

0

248

0

강의 잘 듣고있습니다. 그런데 소스코드에 오타가 있는듯합니다.

1

333

0

포인터를 증가시키거나 감소시킨 상태에서는 delete 사용이 불가능한가요?

0

460

0

const float PI =3.14159265; 로 선언하고 원의 넓이를 구할 때 궁금한 것이 있습니다.

0

661

1

iosteam 헤더 파일 중복

0

365

1

함수 뒤 세미콜론

0

321

0

함수는 원본이 아닌 복사본을 사용한다는 말에 대해서 질문있습니다

0

244

0

sizeof arr에서

0

417

3

포인터를 이용한 주소값이 이상합니다

0

289

1

바이트와 관련하여서 질문이 있습니다

0

262

1

출력이 안되요

0

279

0

마지막에 main.cpp 에서

1

264

0

예제코드 오타 있어요

1

205

0

함수의 대괄호 뒤에 ; 가 붙는것과 안뭍는것의 차이가 뭔가요?

0

221

0

new/delete 연산자

1

259

1

컴파일에러

1

282

1