코딩/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 없음, 간결함
  • 함수에서 원본 데이터를 수정하려면 둘 중 하나를 써야 함