본문 바로가기
c언어

c언어 포인터 배열에 대하여 알아보기

by 개발자 L 2023. 2. 6.
반응형

c언어 포인터 배열에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 포인터 배열에 대하여 알아보는 시간을 가져보도록 하겠습니다.

포인터 배열 역시 종종 쓰이는데, 이것이 무엇이고, 어떤 종류가 있으며,

어떻게 사용하는지 알아보도록 하겠습니다.

 

1. 포인터 배열

포인터 배열은 쉽게 말해서 포인터들을 모아서 배열로 만든 것입니다.

그래서 배열의 원소가 포인터가 됩니다.

그리고 포인터 배열은 크게 두 가지가 있습니다.

  • 정수형 포인터 배열
  • 문자열 포인터 배열

이 둘을 순서대로 알아보도록 하겠습니다.

 

2. 정수형 포인터 배열

정수형 포인터 배열은 이런 식으로 선언을 합니다.

int *ap[10];

그냥 배열 앞에 에스터리스크를 붙여주면 됩니다.

이렇게 하면 어떤 의미가 되느냐면,

변수 ap가 배열인데, 연산자 우선순위에 의해서 int *의 배열이 됩니다.

그리고 배열 ap 안에 있는 원소들은 각각 정수형 포인터가 되며,

정수형 변수들의 주소를 저장할 수 있게 됩니다.

 

2 - 1. 정수형 포인터 배열의 초기화

정수형 포인터 배열을 초기화 할 때는 이런 식으로 합니다.

int a = 10, b = 20, c = 30, d = 40, e = 50;
int *ap[5] = {&a, &b, &c, &d, &e};

포인터 배열 안에는 해당 변수들의 주소가 들어가야 하므로,

앞에 선언이 된 변수들의 주소가 들어가야 합니다.

반응형

 

3. 문자형 포인터 배열

문자형 포인터 배열은 가장 많이 사용이 되는 포인터 배열입니다.

그 이유는 여러 개의 문자열을 효율적으로 저장이 가능하기 때문입니다.

한 가지 예로, 우리가 과일의 이름을 배열에 저장을 한다고 가정을 해봅시다.

그러면 이런 식으로 저장을 할 겁니다.

char fruits[4][10] = {
    "apple",
    "banana",
    "grape",
    "orange"
};

이 부분에서 불편한 점이 있다면,

문자열을 여러 개를 저장하기 위해서는 2차원 배열을 써야 하는데,

글자의 길이가 길어질 수도 있고, 한글의 경우는 기본적으로 한 글자 당 3바이트 정도를 잡아먹기 때문에

공간의 차지를 어마어마하게 합니다.

그래서 처리 시에 메모리를 많이 잡아먹어 느려질 수 있습니다.

그래서 이러한 것들을 방지하고자 우리는 문자형 포인터 배열을 만들어서 저장을 합니다.

이런 식으로 말이죠.

char *fruits[4] = {
    "apple",
    "banana",
    "grape",
    "orange"
};

이렇게 문자형 포인터 배열을 사용해서 선언을 하게 되면 문자열의 길이가 메모리에 영향을 주지 않아서

메모리의 낭비가 발생하지 않습니다.

그럼 이를 이용해서 한 번 간단한 코드를 작성해 보도록 하겠습니다.

#include <stdio.h>

int main()
{
    int n;
    char *fruits[] = {
        "apple",
        "banana",
        "grape",
        "orange"
    };

    n = sizeof(fruits) / sizeof(fruits[0]);

    for(int i = 0; i < n; i++)
    {
        printf("%s \n", fruits[i]);
    }

    return 0;
}

이렇게 코드를 작성해봤는데, 이 코드가 우리가 2차원 배열을 선언해서 문자열을 받았을 때처럼

문자열이 잘 출력이 되는지 확인해 보기 위해 작성을 했습니다.

그럼 결과를 보도록 하겠습니다.

apple 
banana 
grape
orange

결과도 문제없이 잘 출력이 되는 것을 볼 수 있습니다.

 

여기까지 포인터 배열에 대하여 알아보았는데요,

다음 포스팅에서는 배열 포인터에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글