주로 포인터와 배열에 처음 입문한 사람들미 많이들 힘들어 하는데 그중 하나가 '배열 포인터'와 '포인터 배열'이다.
저 두개의 말만 보아도 머리가 아파온다 하지만 어떻게 보면 그리 어렵지도 않은 것들이다.
아래의 문장들을 보자.
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;
}
'포인터 배열'와 '배열 포인터가' 헷갈릴때 참고하면 이둘을 구분하는데 도움이 될 것이다.
'C' 카테고리의 다른 글
C언어 형(Type)이 존재하지 않는 void 포인터 (0) | 2014.07.19 |
---|---|
C언어 함수 포인터 변수 (0) | 2014.07.18 |
C언어 다차원 배열 - 3차원 배열 (2) | 2014.07.02 |
C언어 다차원 배열 - 2차원배열 (0) | 2014.07.01 |
C언어 재귀함수를 이용하여 10진정수 입력받아 2진수로 출력하기 (2) | 2014.06.29 |