주소와 값

&는 주소를 얻고, *는 그 주소의 값을 읽거나 바꿉니다

포인터 변수는 값 자체가 아니라 메모리 주소를 저장합니다. 그래서 &data로 주소를 담고, *ptr로 그 주소의 실제 값에 접근합니다.

예제 코드
int data = 100;
int* ptr = &data;
std::cout << *ptr;
*ptr = 200;

별표의 두 가지 의미

int* ptr에서는 포인터 타입을 선언하고, *ptr에서는 ptr이 가리키는 값을 꺼냅니다.

data
값 100에서 시작
ptr = &data
ptr
data가 놓인 메모리 주소를 저장
*ptr = 200
data
ptr이 가리키는 같은 칸의 값이 200으로 변경