Pointer Model

포인터 변수는 값을 직접 담지 않고 주소를 담는다

`&`는 변수의 주소를 얻고, `*`는 포인터가 가진 주소로 이동해 값을 읽거나 바꿉니다. 선언의 `*`와 역참조의 `*`는 문맥으로 구분합니다.

주소 얻기 `&num`은 num의 위치
주소 저장 `int* p`는 int 주소용 변수
값 접근 `*p`는 가리키는 곳의 값
declare

포인터 선언

int* pNum = nullptr;

아직 가리키는 대상이 없을 때는 널 포인터로 시작하면 우연한 주소 접근을 피합니다.

address

주소 대입

pNum = #

주소 연산자로 얻은 위치를 포인터에 저장하면 포인터가 그 변수를 가리킵니다.

deref

역참조

*pNum = 20;

포인터가 가리키는 메모리의 값을 바꾸므로 원래 변수 `num`의 값도 바뀝니다.

memory view

코드를 메모리 흐름으로 읽는 순서

num

값 10이 특정 주소에 저장됩니다.

&num

변수의 위치를 주소 값으로 꺼냅니다.

pNum

주소를 저장해 num을 가리킵니다.

*pNum

그 주소의 실제 값에 접근합니다.