Intro

 이 글은 포인터 배열과 배열 포인터 그리고 이중 포인터에 대해 다룹니다.


포인터 배열

 

포인터 배열은 배열의 요소가 포인터로 이루어진 것을 의미한다. 선언 방법은 다음과 같다.

char *str[100] = {0}; //포인터 배열을 널 배열로 초기화

 

포인터 배열은 배열의 요소가 포인터로 이루어져 있으므로

포인터의 다른 모습이라 할 수 있는 “문자열”을 저장하는 배열로 활용할 수 있다.

문자열은 문자 여러 개가 저장된 배열이라 볼 수 있기 때문.

예시는 다음과 같다.

// 사용예시
#include <stdio.h>

int main() {

    char *str[3] = {0};
    str[0] = "abc";
    str[1] = "def";
    str[2] = "ghe";
    int i;    

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

    return 0;
}

 

실행 결과

abcdefhge


배열 포인터

 

배열 포인터는 배열을 가리키는 하나의 포인터이다. 선언 방법은 다음과 같다.

int (*pa)[4];

배열 포인터는 2차원 배열과 관련이 있는 개념이다.

 특정 사이즈의 배열만 가리킬 수 있다.

// 사용 예시
int ary[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int (*pa)[4];
pa = ary;

 위의 예시에서 pa는 포인터이다.

그리고 pa가 가리키는 것은 int 4개의 1차원 배열이다.

결국 pa는 a[3][4]의 첫 번째 주소를 지시하는 것이라 볼 수 있다.

#include <stdio.h>

int main(void)
{
    int ary[3][4] {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
    int (*pa)[4];
    
    int i, j;
    
    pa = ary;
    
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("%5d", pa[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

 


이중 포인터

 

이중 포인터는 포인터 변수의 주소를 저장하는, 포인터를 가리키는 포인터이다. 선언 방법은 다음과 같다.

int **p;

img

 


정리

 

포인터 배열: 배열의 요소가 포인터로 이루어져 있다. 배열을 특성을 활용하여 문자열을 저장하는 배열로 활용할 수 있음.

배열 포인터: 배열을 가리키는 포인터로 이중배열에서 활용할 수 있다.

이중 포인터: 포인터 변수를 가리키는 포인터로 문자열 등에서 활용할 수 있다.

 

태그:

카테고리:

업데이트: