Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 포인터 완벽 가이드: 개념부터 예제까지 한눈에 보기

포인터(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 언어의 포인터는 메모리 주소를 다루는 강력한 도구로, 올바르게 활용하면 프로그램의 성능과 유연성을 크게 높일 수 있습니다.