[C언어 공부하기] 14. 포인터 - 우당탕탕 개발자 되기 프로젝트
포인터란 메모리의 주소를 가지고 있는 변수를 말합니다. 포인터를 사용하여 메모리에 접근할 수 있고 주소를 사용하여 값을 지정할 수도, 값을 읽을 수도 있습니다.
포인터를 선언하는 방법은 데이터 타입* 변수명 형태로 선언하거나 데이터 타입 *변수명 형태로 선언할 수 있습니다.
포인터 선언 시 사용하는 *를 포인터 수식어(곱셈 아님)라고 합니다.
포인터는 메모리의 주소를 가지고 있는 변수이기 때문에 사용하기 전에 꼭 초기화를 해줘야 합니다.
포인터 변수를 초기화하는 방법은 포인터를 선언해 주고 주소를 저장할 변수의 주소를 주소 참조 연산자 &를 사용해 지정해 주면 됩니다. 지정할 변수가 당장 없다면 NULL을 적어주어 주는 방법도 있습니다. NULL은 주소 0을 의미합니다.
선언된 포인터에 원하는 변수의 주소값을 할당할 때는 반드시 선언해 준 포인터 변수의 데이터 타입과 주소를 할당해 줄 변수의 데이터 타입이 일치해야 합니다!
하지만 포인터는 메모리의 주소를 의미하므로 선언해 준 데이터 타입에 관계없이 크기는 항상 동일합니다.
포인터 변수를 생성하고 변수의 주소도 지정해 줬을 때, 포인터 변수를 그냥 출력하면 포인터 변수에 저장되어 있는 변수의 주소값이 출력됩니다. 반면에 포인터 변수가 가리키는 값을 출력할 때는 역참조 연산자 *를 사용합니다.
*포인터 변수명 형태는 포인터 변수에 저장되어 있는 주소가 가리키는 값을 의미합니다.
포인터에서는 주소값 자체가 중요한 것이 아니라 포인터가 어떤 변수를 가리키고 있는지가 중요합니다. 즉, 역참조 연산자를 활용할 때 그 포인터가 어떤 값을 가리키고 있는지가 중요합니다!
포인터 또한 const 변수로 선언하여 변경할 수 없도록 지정할 수 있습니다. const(상수화) 포인터를 사용하여 포인터를 3가지의 형태로 선언할 수 있습니다.
const 데이터 타입* 포인터 변수명 형태는 읽기 전용 포인터라고 합니다. 읽기 전용 변수는 포인터가 가리키는 값을 변경할 수 없습니다.
데이터 타입* const 포인터 변수명 형태는 특정 전용 포인터라고 합니다. 특정 전용 포인터는 포인터 자신의 값(포인터에 저장된 수조)을 변경할 수 없습니다.
const 데이터 타입* const 포인터 변수명 형태는 읽기 전용 포인터이면서 특정 전용 포인터라고 합니다. 읽기 전용 포인터의 특성과 특정 전용 포인터의 특성을 둘 다 가지고 있습니다.