컴퓨터 메모리에는 여러 개의 바이트로 구성되어 있으며 각 바이트마다 0부터 시작하는 주소가 붙어져 있다.

변수는 이 메모리에 이름을 붙여서 참조하는 것이고 개발자는 특별히 메모리 주소에 신경 쓸 필요가 없다.

하지만 장치 드라이버나 동적 메모리 할당에서 메모리 주소를 참조해야하는 경우가 발생한다. 이때

포인터를 사용한다.

포인터

포인터는 메모리의 주소가 저장되어 있다. 이름 그대로 주소를 가리킨다고 봐도 된다.

포인터의 선언은 다음과 같다.

int* p;

정수형 말고도 double, char, short 등 다양한 자료형의 포인터를 생성할 수 있다.

또한 포인터 타입과 변수의 타입을 일치 시켜야 한다.

주소연산자

변수의 주소를 계산하는 연산자 &

& 연산자를 이용하여 변수의 주소를 계산하여 포인터에 저장하면 된다.

int number = 10;
int *p;

p = &number;

위 코드는 변수 number의 주소를 계산하여 p에 저장하는 코드이다.

number라는 변수의 이름으로 1008 주소를 가진 메모리에 10이 저장되고, p에는 1008 주소가 저장된다

즉, number = 10 , p = 1008이 저장되는 것이다.

위 경우를 “포인터 p가 변수 number를 가르킨다” 라고 한다.