포인터(Pointer)란 무엇인가?
포인터는 기본적으로 다른 변수의 메모리 주소를 저장하는 변수입니다. 프로그램에서 변수에 메모리를 할당하면, 포인터는 그 변수가 위치한 주소를 가리키게 됩니다.
C와 C++에서 포인터를 선언할 때는 단항 연산자인 별표(*)를 사용합니다. 이 연산자는 나중에 포인터가 가리키는 메모리 주소에 저장된 값을 읽어오는 역참조(dereference)에도 활용됩니다.
포인터 선언 문법
포인터를 선언하는 기본 문법은 다음과 같습니다.
datatype *variable_name;
각 구성 요소의 의미는 다음과 같습니다.
datatype — 포인터가 가리킬 변수의 자료형입니다. int, char, float 등 어떤 자료형도 가능합니다.
variable_name — 사용자가 직접 지정하는 포인터 변수의 이름입니다.
포인터 예제 코드
다음은 포인터의 동작을 보여주는 간단한 C 언어 예제입니다.
#include <stdio.h>
int main () {
int a = 8;
int *ptr;
ptr = &a;
printf("Value of variable : %d\n", a);
printf("Address of variable : %d\n", ptr);
printf("Value pointer variable : %d\n",*ptr);
return 0;
}실행 결과
Value of variable : 8 Address of variable : -201313340 Value pointer variable : 8
코드 상세 설명
위 프로그램에서는 정수형 변수 a와 포인터 변수 *ptr을 선언했습니다. 핵심 코드는 다음 세 줄입니다.
int a = 8; int *ptr; ptr = &a;
첫 번째 줄에서 정수형 변수 a에 8이라는 값을 초기화하고, 두 번째 줄에서 int형을 가리키는 포인터 ptr을 선언합니다. 세 번째 줄의 &a는 주소 연산자(address-of operator)로, 변수 a의 메모리 주소를 구해 포인터 ptr에 대입합니다.
실행 결과를 보면 첫 번째 출력은 변수 a의 값(8), 두 번째 출력은 포인터에 저장된 메모리 주소값(실행 환경마다 달라질 수 있음), 세 번째 출력은 포인터를 역참조하여 가져온 값(8)임을 확인할 수 있습니다. 즉, 포인터 ptr은 변수 a의 주소를 저장하고 있으며, *ptr을 통해 간접적으로 a의 값에 접근할 수 있습니다.