포인터(pointer)란 다른 변수의 메모리 주소를 저장하는 특수한 변수입니다. C 언어에서 포인터는 메모리를 직접 제어할 수 있게 해주는 핵심 개념으로, 효율적인 프로그래밍을 위해 반드시 이해해야 하는 요소입니다.
포인터의 주요 특징
메모리 공간 절약: 포인터를 활용하면 불필요한 데이터 복사 없이 메모리 공간을 효율적으로 사용할 수 있습니다.
빠른 실행 속도: 포인터는 메모리 위치에 직접 접근하기 때문에 실행 시간이 더 빠릅니다.
효율적인 메모리 접근: 포인터를 이용하면 메모리에 효율적이고 유연하게 접근할 수 있습니다.
동적 메모리 관리: malloc(), free() 등과 함께 사용하여 메모리를 동적으로 할당하고 해제할 수 있습니다.
자료 구조 구현: 연결 리스트(linked list), 트리(tree) 등 복잡한 자료 구조를 구현할 때 필수적으로 사용됩니다.
포인터의 기본 문법
포인터의 기본 문법은 다음과 같습니다.
pointer = &variable;
즉, 변수 이름 앞에 주소 연산자 &를 붙여 해당 변수의 주소를 포인터 변수에 저장합니다.
포인터 예제 코드
다음은 포인터의 동작을 확인할 수 있는 C 프로그램입니다.
#include <stdio.h>
int main(){
int x=40; //변수 선언
int *p; //포인터 변수 선언
p=&x; //변수 x의 주소를 포인터 p에 저장
printf("변수 p에 저장된 주소:%d\n",p); //주소 값 접근
printf("변수 p가 가리키는 값:%d\n",*p); //값 접근
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
변수 p에 저장된 주소:5ff678 변수 p가 가리키는 값:40
출력 결과에서 알 수 있듯이, 포인터 p에는 변수 x의 메모리 주소가 저장되고, 간접 참조 연산자 *를 사용하면 그 주소에 저장된 실제 값(40)에 접근할 수 있습니다.
* 연산자와 & 연산자의 역할
간접 참조 연산자 *(asterisk)
* 연산자는 두 가지 목적으로 사용됩니다.
포인터 변수를 선언할 때 사용됩니다. (예:
int *p;)포인터가 가리키는 변수의 값을 반환합니다. (예:
*p)
주소 연산자 &(ampersand)
& 연산자는 한 가지 목적으로만 사용됩니다.
변수의 메모리 주소를 반환합니다. (예:
&x)
이처럼 C 언어의 포인터는 메모리 주소를 다루는 강력한 도구로, 올바르게 활용하면 프로그램의 성능과 유연성을 크게 높일 수 있습니다.