문자열 포인터 배열이란?
C 언어에서 포인터 배열(array of pointers)은 각 요소가 문자열의 시작 주소(베이스 주소)를 가리키는 포인터로 구성된 배열을 의미합니다. 즉, 여러 개의 문자열을 2차원 문자 배열 대신 포인터를 이용해 효율적으로 관리할 수 있는 방법입니다.
선언과 초기화는 다음과 같이 수행합니다.
char *a[3] = {"one", "two", "three"};
// a[0]은 문자열 "one"의 시작 주소를 가리키는 포인터
// a[1]은 문자열 "two"의 시작 주소를 가리키는 포인터
// a[2]은 문자열 "three"의 시작 주소를 가리키는 포인터장점
2차원 문자 배열과 달리, 문자열 포인터 배열은 저장 공간의 크기가 고정되어 있지 않습니다.
각 문자열이 실제로 필요한 만큼의 바이트만 차지하기 때문에 메모리 낭비가 없습니다.
예제 1
컴파일 시점에 문자열 포인터 배열을 선언하고 출력하는 기본적인 예제입니다.
#include<stdio.h>
main (){
char *a[5] = {"one", "two", "three", "four", "five"}; // 컴파일 시점에 문자열 포인터 배열 선언
int i;
printf("The strings are:");
for (i=0; i<5; i++)
printf("%s", a[i]); // 문자열 배열 출력
getch();
}출력 결과
The strings are: one two three four five
예제 2
이번에는 학생 이름을 저장하는 문자열 포인터 배열의 또 다른 예제를 살펴보겠습니다.
#include <stdio.h>
#include <string.h>
int main(){
// 문자열 포인터 배열 초기화
char *students[] = {"bhanu", "ramu", "hari", "pinky"};
int i, j, a;
printf("The names of students are:\n");
for(i=0; i<4; i++)
printf("%s\n", students[i]);
return 0;
}출력 결과
The names of students are: bhanu ramu hari pinky
이처럼 문자열 포인터 배열을 활용하면 고정된 크기의 2차원 배열 없이도 여러 문자열을 유연하게 다룰 수 있으며, 메모리를 더욱 효율적으로 사용할 수 있습니다.