반응형
Notice
Recent Posts
Recent Comments
Link
개발자 최승준
[C++] 포인터와 레퍼런스(참조)의 차이점 본문
C++에서 포인터와 레퍼런스(참조)는 모두 변수나 객체의 메모리 주소에 접근하는 방법을 제공하지만, 몇가지 차이가 있습니다.
1. Nullability(Null이 될 수 있는지 여부): 포인터는 NULL 값을 가질 수 있습니다. 이것은 포인터가 아무것도 가리키지 않을 수 있다는 것을 의미합니다. 반면에 참조는 반드시 어떤 객체를 참조해야 하며 NULL 값을 가질 수 없습니다.
int* p = NULL; // 유효
int& r = NULL; // 컴파일 오류
2. Reassignment(재할당): 한번 초기화된 후에는 참조는 다른 객체를 참조하도록 변경할 수 없습니다. 반면에 포인터는 언제든지 다른 주소를 가리키도록 변경할 수 있습니다.
int x = 5, y = 10;
int* p = &x; // x의 포인터
p = &y; // y의 포인터로 변화
int& r = x; // x의 참조
r = y; // y를 참조하지 않고 y의 값을 x에 할당합니다. 이제 x와 y는 모두 10
3. Syntax(구문): 포인터는 역참조 연산자(*)를 사용하여 가리키는 값에 접근해야 합니다. 반면에 참조는 일반 변수처럼 사용할 수 있습니다.
int x = 5;
int* p = &x;
int& r = x;
*p = 10; // 포인터를 통해 x값 변경
r = 20; // 참조를 통해 x값 변경
4. 자세한 표현: 포인터 *x 와 참조 &r 이 존재한다고 가정합니다. 이때 x, &x, r, &r은 무엇을 뜻할까요?
- x: x는 포인터입니다. 그러므로 x는 저장되어 있는 주소를 가리킵니다.
- &x: &x는 x의 주소입니다. 즉, 포인터 x가 저장되어 있는 메모리의 주소를 나타냅니다.
- r: r은 참조입니다. r은 기존 변수에 대한 별칭으로 사용됩니다. r은 변수를 직접 가리키며, r의 값이 변경되면 원래의 변수의 값도 변경됩니다.
- &r: &r는 r이 참조하는 변수의 주소입니다. r이 참조하는 변수가 메모리의 어디에 위치하는지 나타냅니다. 참조는 본질적으로 그들이 참조하는 변수의 별칭이므로, &r는 참조되는 변수의 주소를 제공합니다.
int y = 5;
int *x = &y; // x는 y의 주소를 가리키는 포인터입니다.
int &r = y; // r은 y의 참조입니다.
std::cout << "x: " << x << "\n"; // y의 주소를 출력합니다.
std::cout << "&x: " << &x << "\n"; // 포인터 x의 주소를 출력합니다.
std::cout << "r: " << r << "\n"; // y의 값을 출력합니다.
std::cout << "&r: " << &r << "\n"; // y의 주소를 출력합니다.
'프로그래밍' 카테고리의 다른 글
리플렉션(Reflection) - 기본 개념 (1) | 2024.12.05 |
---|