포인터(pointer)란, 메모리 공간의 주소를 가리키는 변수
포인터 변수로도 불림
역참조란, 포인터가 가리키는 값을 가져오는 것임
(1) 주소 연산자(&)
변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환
'&'는 ampersand라고 읽으며, 번지 연산자라고도 함
(2) 참조 연산자(*)
포인터 이름이나 주소 앞에 사용하여, 포인터가 가리키는 주소에 저장된 값을 반환
c언어에서 '*' 기호는 이항연산자로 사용하면 곱셈 연산으로 사용되며, 포인터의 선언 시나 메모리에 접근할 때도 사용됨
포인터는 컴퓨터 시스템의 특정 메모리에 바로 접근 가능
따라서 기존에 존재하던 중요한 메모리 영역에 접근하지 않도록 유의해야함
c언어에서 변수는 정적, 동적 변수가 있음
(1) 정적변수: 처리할 데이터의 숫자를 예측할 수 있는 경우 선언
예측 불가하다면 최대의 데이터 처리량을 정한 후, 선언
(2) 동적변수: 정적변수의 문제를 해결하기 위해 사용
ex. malloc() 함수 사용하여 데이터 저장공간 확보
할당 malloc(): heap 영역으로부터 데이터 공간 할당받음
재할당 realloc(): 이미 할당된 메모리 공간 크기 조정
해제 free(): 더 이상 쓸 필요가 없는 메모리 공간을 heap 영역에 반환
v = *p++: p가 가리키는 값을 v에 대입한 후, p를 증가
v = (*p)++: p가 가리키는 값을 v에 대입한 후, p가 가리키는 값을 증가
v = *++P: p를 증가시킨 후, p가 가리키는 값을 v에 대입
v = ++*p: p가 가리키는 값을 가져온 후, 그 값을 증가하여 v에 대입