코딩/c++
C++ 기본 문법(5)
Yellow Kirin
2025. 6. 2. 20:03
C++ 기본 문법: 포인터와 레퍼런스
1. 포인터(Pointer)
포인터는 변수의 메모리 주소를 저장하는 변수임. *
기호를 사용해 선언하고, &
기호로 주소를 구함.
예제
int a = 10;
int* p = &a; // a의 주소를 포인터에 저장
cout << "a의 값: " << a << endl;
cout << "a의 주소: " << &a << endl;
cout << "포인터 p가 가리키는 값: " << *p << endl;
설명
int* p
: int형 포인터 변수 선언&a
: 변수 a의 주소*p
: 포인터 p가 가리키는 주소의 값 (역참조)
2. 레퍼런스(Reference)
레퍼런스는 기존 변수의 또 다른 이름(별명)임. &
기호를 사용해서 선언하지만, 주소가 아니라 "참조" 의미임.
예제
int a = 10;
int& ref = a; // ref는 a의 또 다른 이름
ref = 20;
cout << "a: " << a << endl; // 20 출력
설명
int& ref = a
: a를 참조하는 변수 ref 생성ref
를 수정하면a
도 같이 바뀜 (같은 메모리)
3. 함수에서 포인터 사용
void swap(int* x, int* y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a = 5, b = 10;
swap(&a, &b);
cout << a << ", " << b << endl; // 10, 5
}
포인터를 사용하면 함수에서도 원본 데이터를 수정할 수 있음
4. 함수에서 레퍼런스 사용
void swap(int& x, int& y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 5, b = 10;
swap(a, b);
cout << a << ", " << b << endl; // 10, 5
}
레퍼런스를 쓰면 포인터보다 간단하게 원본 수정 가능함
5. 포인터 vs 레퍼런스
항목 | 포인터 | 레퍼런스 |
---|---|---|
주소 저장 | O | X (직접 주소를 저장하진 않음) |
NULL 가능 여부 | 가능 | 불가능 (초기화 반드시 필요) |
초기화 후 변경 | 가리키는 대상 변경 가능 | 한 번 참조하면 변경 불가 |
문법 복잡도 | 상대적으로 복잡 | 간결하고 안전함 |
요약
- 포인터: 주소값 저장, 역참조 필요, NULL 가능
- 레퍼런스: 다른 이름처럼 작동, NULL 없음, 간결함
- 함수에서 원본 데이터를 수정하려면 둘 중 하나를 써야 함