CPP 포인터 사용 방법
포인터 레퍼런스 용법
CPP 포인터 사용 방법
포인터와 레퍼런스 용법
포인터 (*)
포인터는 변수의 메모리 주소를 저장하는 변수이다.
기본 선언
1
2
int v; // 정수 변수
int* p; // int형 변수의 주소를 저장하는 포인터
주소 저장
1
2
int v = 10;
int* p = &v;
v에는 실제 값(10)이 저장된다.p에는v의 메모리 주소가 저장된다.&v는v의 주소를 의미한다.
왜 사용하는가?
값 자체를 전달하는 대신 메모리 주소를 직접 전달할 수 있기 때문이다.
특히 다음과 같은 경우에 유용하다.
- 배열을 다룰 때
- 객체를 전달할 때
- 함수 인자로 전달할 때
- 큰 데이터를 복사하지 않고 사용할 때
- 동적 메모리를 사용할 때
복잡한 클래스나 여러 함수 호출 계층을 거칠 때 메모리 주소를 통해 직접 접근하는 것은 매우 중요하다.
레퍼런스 (&)
레퍼런스는 기존 변수에 대한 별명(Alias) 이다.
기본 선언
1
2
int v = 10;
int& r = v;
특징
1
r = 20;
위 코드를 실행하면 v도 20이 된다.
1
cout << v; // 20
r과v는 같은 데이터를 가리킨다.- 새로운 변수가 생성되는 것이 아니다.
- 변수의 또 다른 이름이라고 생각하면 된다.
비유
1
2
int v = 10;
int& r = v;
v: 본명r: 별명
둘 다 같은 사람을 부르는 이름일 뿐이다.
차이점
| 구분 | 포인터 | 레퍼런스 |
|---|---|---|
| 저장하는 것 | 메모리 주소 | 기존 변수의 별명 |
| 선언 | int* p | int& r = v |
| 다른 대상 연결 가능 | 가능 | 불가능 |
| NULL 가능 | 가능 | 불가능 |
| 주소 연산 | 가능 | 직접 사용하지 않음 |
예시
1
2
3
4
int v = 10;
int* p = &v; // 주소 저장
int& r = v; // 별명 생성
p→v의 주소를 저장r→v자체를 다른 이름으로 사용
This post is licensed under CC BY 4.0 by the author.