POST

C언어 '포인터 배열'과 '배열 포인터'의 차이점

주로 포인터와 배열에 처음 입문한 사람들미 많이들 힘들어 하는데 그중 하나가 '배열 포인터'와 '포인터 배열'이다.

저 두개의 말만 보아도 머리가 아파온다 하지만 어떻게 보면 그리 어렵지도 않은 것들이다.

아래의 문장들을 보자.


int * who_a[4];  // 포인터 배열

int (*who_b)[4]; // 배열 포인터


감이 오는가? who_a와 who_b의 유일한 차이점은 소괄호의 유무이다. 하지만 이 하나의 차이가 꾀나 다른 뜻을 가진다.


우선 who_a는 int형 포인터의 배열이다. 즉, 배열의 선언이 되는 것이다.

who_b는 int형의 배열을 가리키는 포인터 변수이다. 이것은 포인터 변수의 선언이 된다.


아래의 소스코드를 참고하면 이제 완벽히 알 수 있을 것이다.


#include<stdio.h>


int main(void) {

int num1 = 10, num2 = 20, num3 = 30, num4 = 40; // int형 변수 선언

int arr2d[2][4] = { 1, 2, 3, 4, 5, 6, 7, 8 }; // int형 배열 선언

int i, j;


int *who_a[4] = { &num1, &num2, &num3, &num4 }; // 포인터 배열(포인터의 배열)

int(*who_b)[4] = arr2d; // 배열 포인터(배열의 포인터)


printf("%d %d %d %d\n", *who_a[0], *who_a[1], *who_a[2], *who_a[3]);


for (i = 0; i < 2; i++) {

for (j = 0; j < 4; j++)

printf("%d ", who_b[i][j]);

printf("\n");

}

return 0;

}




'포인터 배열'와 '배열 포인터가' 헷갈릴때 참고하면 이둘을 구분하는데 도움이 될 것이다.