C++ 포인터

위린이·2025년 8월 28일

🟢 1. 변수와 주소

  • 우리가 변수를 만들면 컴퓨터는 메모리(책장 같은 공간) 에 그 변수를 저장해요.
  • 변수는 이름표가 붙은 상자라고 생각하면 돼요.
int a = 10;

👉 상자 이름은 a, 안에 들어 있는 값은 10.
그리고 상자는 책장처럼 메모리 속 주소를 가지고 있어요. (예: 1000번 칸)


🟢 2. 포인터란?

👉 포인터(pointer) = “상자의 주소를 저장하는 또 다른 상자”

int a = 10;
int* p = &a;   // a의 주소를 포인터 p에 저장

📌 비유로 보면:

  • a = 값이 들어 있는 상자 (10이 들어 있음)
  • p = "a가 있는 칸 번호(주소)"를 적어둔 쪽지

🟢 3. *& 기호

  • & : “주소를 알려줘”
  • * : “주소에 가서 안에 있는 값을 보여줘”

예제:

int a = 10;
int* p = &a;

cout << a;   // 10  (a의 값)
cout << &a;  // 1000 (가정: a의 주소)
cout << p;   // 1000 (p에 저장된 주소)
cout << *p;  // 10   (p가 가리키는 값)

🟢 4. 포인터로 값 바꾸기

int a = 10;
int* p = &a;

*p = 50;  // p가 가리키는 곳(a)에 50을 넣기
cout << a; // 50 출력

👉 포인터는 “쪽지에 적힌 집에 찾아가서 직접 값 고치기”가 가능해요.


🟢 5. 언제 쓰일까?

  1. 함수에서 값 직접 바꾸고 싶을 때

    void change(int* x) {
        *x = 99;
    }
    
    int main() {
        int a = 10;
        change(&a);  
        cout << a;  // 99
    }

    👉 그냥 값만 넘기면 복사본만 바뀌지만, 주소를 넘기면 원본을 바꿀 수 있어요.

  2. 배열과 포인터

    • 배열 이름은 사실 첫 번째 원소의 주소!
    int arr[3] = {1,2,3};
    int* p = arr;   // arr == &arr[0]
    
    cout << *p;     // 1
    cout << *(p+1); // 2
  3. 동적 메모리 (new, delete)
    실행 도중 필요한 만큼 메모리를 쓸 수 있음.

    int* p = new int; 
    *p = 123;
    cout << *p; // 123
    delete p;   // 메모리 반납

🟢 6. 아주 간단히 요약

  • 변수: 값이 들어 있는 상자
  • 주소: 상자가 있는 위치(번호표)
  • 포인터: “그 상자가 어디 있는지” 적어둔 쪽지
  • * : 쪽지 보고 안에 있는 값 확인/수정
  • & : 상자의 주소 얻기

0개의 댓글