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

C 언어 포인터란? 개념과 특징, 문자열 접근 예제로 쉽게 이해하기

포인터(Pointer)는 다른 변수의 메모리 주소를 저장하는 변수입니다. C 언어에서 포인터는 메모리를 직접 제어할 수 있게 해주는 강력한 도구로, 효율적인 프로그램을 작성하기 위해 반드시 이해해야 하는 핵심 개념입니다.

포인터의 주요 특징

  • 메모리 공간 절약 – 데이터를 복사하지 않고 주소만으로 접근할 수 있어 메모리를 효율적으로 사용합니다.

  • 빠른 실행 속도 – 메모리 위치에 직접 접근하기 때문에 실행 시간이 단축됩니다.

  • 효율적인 메모리 관리 – 포인터를 사용하면 메모리를 동적으로 할당하고 해제할 수 있습니다.

  • 자료구조 구현에 필수 – 연결 리스트(linked list), 트리(tree) 등의 자료구조를 만들 때 포인터가 활용됩니다.

아래에서는 포인터를 사용해 문자열 내의 특정 문자에 접근하고, 값을 변경한 뒤 출력하는 방법을 두 가지 예제를 통해 살펴보겠습니다.

예제 1: 포인터로 배열 요소 접근하기

#include<stdio.h>
int main(){
    char array[5] = "Tutorial", *ptr, i, *ptr1;
    ptr = &array[1];
    ptr1 = ptr + 3;
    *ptr1 = 101;
    for(i = 0; i < 4;i++)
        printf("%c", *ptr++);
    return 0;
}

동작 원리

  1. 포인터 ptr에 배열의 두 번째 요소(array[1], 즉 문자 'u')의 주소를 저장합니다.
  2. ptr1 = ptr + 3 포인터 연산을 통해 세 칸 뒤에 있는 문자('r')의 주소를 계산합니다.
  3. *ptr1 = 101을 실행하여 해당 위치의 값을 101로 바꿉니다. 101은 ASCII 코드로 문자 'e'에 해당합니다.
  4. 반복문이 ptr이 가리키는 위치부터 4개의 문자('u', 't', 'o', 'e')를 순서대로 출력합니다.

실행 결과

utoe

즉, 포인터가 가리키는 위치부터 시작해 원래 문자열의 일부가 출력되고, 포인터 연산으로 변경된 문자 'e'까지 함께 출력된 것을 확인할 수 있습니다.

예제 2: 다른 문자열로 응용하기

같은 원리를 다른 문자열에 적용한 예제입니다.

#include<stdio.h>
int main(){
    char string[10] = "CprogRamming", *p, i, *p1;
    p = &string[5];
    p1 = p + 3;
    *p1 = 101;
    for(i = 0; i < 4;i++)
        printf("%c", *p++);
    return 0;
}

동작 원리

  1. 포인터 p가 여섯 번째 요소(string[5], 즉 문자 'R')를 가리킵니다.
  2. p1 = p + 3으로 세 칸 뒤의 문자('m')의 주소를 계산합니다.
  3. *p1 = 101로 해당 문자를 'e'로 변경합니다.
  4. 반복문이 'R'부터 4개의 문자를 출력합니다.

실행 결과

Rame

마무리

이처럼 포인터를 활용하면 문자열이나 배열의 특정 위치에 직접 접근하여 값을 읽거나 수정할 수 있습니다. 포인터 연산(ptr + n)과 역참조(*ptr)의 동작 방식을 정확히 이해하면, 메모리를 효율적으로 다루는 고급 C 프로그래밍의 기초를 탄탄히 다질 수 있습니다.