참조변수 질문이요
참조변수는 어떤경우에 쓰는거고 포인터변수로 swap하는거랑 차이점이 뭔가요??
Answer 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의 차이점을 말씀드릴 수 있을 것 같습니다.
(따라서 참조 변수를 가장 많이 사용하는 순간도 함수에 매개변수로 값을 넘겨줄 때 입니다!)
포인터 문자열 할당시 +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

