int a = 10;
👉 상자 이름은 a, 안에 들어 있는 값은 10.
그리고 상자는 책장처럼 메모리 속 주소를 가지고 있어요. (예: 1000번 칸)
👉 포인터(pointer) = “상자의 주소를 저장하는 또 다른 상자”
int a = 10;
int* p = &a; // a의 주소를 포인터 p에 저장
📌 비유로 보면:
a = 값이 들어 있는 상자 (10이 들어 있음)p = "a가 있는 칸 번호(주소)"를 적어둔 쪽지*와 & 기호& : “주소를 알려줘”* : “주소에 가서 안에 있는 값을 보여줘”예제:
int a = 10;
int* p = &a;
cout << a; // 10 (a의 값)
cout << &a; // 1000 (가정: a의 주소)
cout << p; // 1000 (p에 저장된 주소)
cout << *p; // 10 (p가 가리키는 값)
int a = 10;
int* p = &a;
*p = 50; // p가 가리키는 곳(a)에 50을 넣기
cout << a; // 50 출력
👉 포인터는 “쪽지에 적힌 집에 찾아가서 직접 값 고치기”가 가능해요.
함수에서 값 직접 바꾸고 싶을 때
void change(int* x) {
*x = 99;
}
int main() {
int a = 10;
change(&a);
cout << a; // 99
}
👉 그냥 값만 넘기면 복사본만 바뀌지만, 주소를 넘기면 원본을 바꿀 수 있어요.
배열과 포인터
int arr[3] = {1,2,3};
int* p = arr; // arr == &arr[0]
cout << *p; // 1
cout << *(p+1); // 2
동적 메모리 (new, delete)
실행 도중 필요한 만큼 메모리를 쓸 수 있음.
int* p = new int;
*p = 123;
cout << *p; // 123
delete p; // 메모리 반납
* : 쪽지 보고 안에 있는 값 확인/수정& : 상자의 주소 얻기