포인터 배열과 배열 포인터 그리고 이중 포인터
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;
}
실행 결과
배열 포인터
배열 포인터는 배열을 가리키는 하나의 포인터이다. 선언 방법은 다음과 같다.
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;
정리
포인터 배열: 배열의 요소가 포인터로 이루어져 있다. 배열을 특성을 활용하여 문자열을 저장하는 배열로 활용할 수 있음.
배열 포인터: 배열을 가리키는 포인터로 이중배열에서 활용할 수 있다.
이중 포인터: 포인터 변수를 가리키는 포인터로 문자열 등에서 활용할 수 있다.