본문 바로가기

윤성우의 C Programming

'배열 포인터' 와 '포인터 배열'을 혼동하지 말자

결론적으로 '배열 포인터'은 배열 전체를 가리키는 하나의 포인터이고 '포인터 배열' 여러 포인터를 저장하는 배열이다. 

배열 포인터(Pointer to an Array)

배열 포인터는 특정 타입의 배열을 가리키는 포인터이다. 이는 배열 전체를 가리키며, 주로 다차원 배열을 다룰 때 사용된다. 배열 포인터를 사용하면, 배열의 특정 요소가 아닌 배열 전체를 가리킬 수 있어, 배열의 크기나 다차원 배열의 특정 행에 접근하는 등의 작업을 용이하게 할 수 있다. 

int (*ptrToArray)[5]; // 5개의 정수를 가지는 배열을 가리키는 포인터

 

배열 포인터 예시

#include <stdio.h>

int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int (*ptrToArray)[3] = arr; // 배열 포인터: 3개의 정수를 갖는 배열을 가리킴

    printf("Using Array Pointer:\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", ptrToArray[i][j]); // 배열 포인터를 통해 배열 요소에 접근
        }
        printf("\n");
    }

    return 0;
}

포인터 배열(Array of Pointers)

반면, 포인터 배열은 포인터들의 배열이다. 즉, 각 배열 요소가 포인터인 배열을 말한다. 이는 여러 포인터를 저장해야 할 때 사용된다.

int *arrayOfPointers[5]; // 정수를 가리키는 포인터 5개의 배열

 

포인터 배열 예시

#include <stdio.h>

int main() {
    int num1 = 1, num2 = 2, num3 = 3;
    int *arrayOfPointers[3] = {&num1, &num2, &num3}; // 포인터 배열: 정수를 가리키는 포인터들의 배열

    printf("Using Array of Pointers:\n");
    for (int i = 0; i < 3; i++) {
        printf("%d ", *arrayOfPointers[i]); // 포인터 배열을 통해 각 정수 값에 접근
    }
    printf("\n");

    return 0;
}