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

C 언어로 문자열 포인터 배열과 그 주소 출력하기

C 언어에서 포인터 배열이란?

예제를 살펴보기 전에, C 프로그래밍 언어에서 포인터 배열(array of pointers)이 어떤 개념인지 먼저 이해해 보겠습니다.

문자열을 가리키는 포인터 배열

  • 포인터 배열이란 각 요소가 문자열의 시작 주소(base address)를 가리키는 포인터로 구성된 배열입니다.

  • 다음과 같이 선언하고 초기화할 수 있습니다.

char *a[ ] = {"one", "two", "three"};

여기서 각 요소는 다음과 같이 동작합니다.

  • a[0]: 문자열 "one"의 시작 주소를 가리키는 포인터

  • a[1]: 문자열 "two"의 시작 주소를 가리키는 포인터

  • a[2]: 문자열 "three"의 시작 주소를 가리키는 포인터

포인터 배열의 장점

문자열을 가리키는 포인터 배열의 장점은 다음과 같습니다.

  • 2차원 문자 배열과 달리, 포인터 배열을 사용하면 저장 공간에 고정된 메모리 크기를 할당할 필요가 없습니다.

  • 각 문자열이 필요한 만큼의 바이트만 차지하므로 메모리 공간의 낭비가 없습니다.

예제 1: 문자열 값과 주소 함께 출력하기

다음은 문자열을 가리키는 포인터 배열의 값을 출력함과 동시에 각 문자열의 주소도 함께 출력하는 C 프로그램입니다.

#include<stdio.h>
#include<string.h>
void main(){
    // 문자열과 포인터, 반복문 변수 선언 //
    int i;
    char *a[5]={"One","Two","Three","Four","Five"};
    // for 문으로 각 문자열 위치의 값 출력 //
    printf("The values in every string location are : \n");
    for(i=0;i<5;i++){
        printf("%s\n",a[i]);
    }
    // for 문으로 각 문자열 위치의 주소 출력 //
    printf("The address locations of every string values are : \n");
    for(i=0;i<5;i++){
        printf("%d\n",a[i]);
    }
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

The values in every string location are:
One
Two
Three
Four
Five
The address locations of every string values are:
4210688
4210692
4210696
4210702
4210707

참고로, 출력되는 주소 값은 프로그램을 실행하는 시스템 환경과 실행 시점에 따라 달라질 수 있습니다. 주소는 단순히 메모리상의 위치를 나타낼 뿐이며, 인접한 문자열들이 메모리에 순차적으로 배치되는 것을 확인할 수 있습니다.

예제 2: 포인터로 문자열 한 글자씩 출력하기

이번에는 또 다른 예제를 살펴보겠습니다. 아래 프로그램은 포인터를 이용하여 문자열의 내용을 한 글자씩 이동하면서 출력하는 방법을 보여줍니다.

#include<stdio.h>
#include<string.h>
void main(){
    // 문자열과 포인터 선언 //
    char string[15]="TutorialPoint";
    char *pointer = string;
    // 포인터를 사용하여 문자열 출력 //
    printf("The string is : ");
    while(*pointer!='\0'){
        printf("%c",*pointer);
        pointer++;
    }
}

여기서 *pointer는 현재 가리키고 있는 단일 문자(char)이므로, 서식 지정자로 %c를 사용해야 합니다. 포인터를 한 칸씩 증가(pointer++)시키며 널 문자('\0')를 만날 때까지 반복하면 문자열 전체가 순서대로 출력됩니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

The string is: TutorialPoint