배열 포인터
배열 포인터는 열을 지정할 수 있는 포인터이다.
배열 포인터는 이렇게 생겼다.
- 자료형 : 배열 포인터 변수가 저장하는 배열의 자료형
- 배열 포인터 변수의 이름 : * 연산자와 배열 포인터 변수의 이름을 함께 괄호로 묶음
- 열의 길이 : 배열 포인터 변수가 가리키는 배열의 열의 길이를 지정
배열 포인터 변수의 사용
앞서 살펴본 2차원 배열의 포인터식 접근과 같다.
1차원 포인터 변수와 1차원 배열의 관계처럼 사용할 수 있다.
int arr[2][3] = {10, 20, 30, 40, 50, 60};
int (*p)[3] = arr; // p = arr[0][0]
printf("%x %x\n", &p[0][0], arr);
printf("%d %d", p[0][1], *(*(p + 0) + 1));
코드를 보아도 알 수 있고, 이번에도 이해를 돕기 위한 그림이다.
아래는 배열 포인터를 사용해 2차원 배열의 주소를 나타내는 방법이다.
아래는 배열 포인터를 사용해 2차원 배열의 값을 나타내는 그림이다.
포인터 배열
포인터 배열은 포인터들의 배열이라고 생각하면 쉽다.
포인터들의 배열, 결국 주소를 저장하는 배열이다.
- 자료형 : 포인터 배열의 자료형을 지정한다. 자료형 뒤에 * 연산자를 붙인다.
- 포인터 배열의 이름 : 주소를 저장할 배열의 이름을 지정한다.
- 배열 길이 : 주소를 저장할 배열의 전체 길이를 지정한다.
포인터 배열은 다음과 같이 선언한다.
int a = 1, b = 2, c = 3;
int* pointer[3] = {NULL, NULL, NULL};
// 포인터 배열 선언
pointer[0] = &a;
pointer[1] = &b;
pointer[2] = &c;
포인터 배열이 필요한 이유는,
포인터 변수가 많아지는 상황의 단점을 보완하기 위해서이다.
int a = 10, b = 20, c = 30;
int *ap = NULL;
int *bp = NULL;
int *cp = NULL;
// 포인터 변수 3개 선언
*ap = &a;
*bp = &b;
*cp = &c;
위와 같이 포인터 변수가 많아지면 관리가 어려워진다.
이때 같은 상황에서 포인터 배열을 사용한다면,
하나의 포인터 변수를 포인터 배열의 요소로써 주소를 체계적으로 관리할 수 있게 된다.
int a = 10, b = 20, c = 30;
int* p[3] = {NULL};
// 포인터 배열 선언
p[0] = &a;
p[1] = &b;
p[2] = &c;
'C' 카테고리의 다른 글
[C] 포인터와 1차원 배열 (0) | 2023.10.26 |
---|---|
[C] 포인터와 2차원 배열 (0) | 2023.10.26 |
[C] 포인터와 함수 (0) | 2023.10.26 |
[C] 포인터와 다차원 포인터 (0) | 2023.10.24 |
[C] C의 문자열, 문자 배열 (0) | 2023.10.18 |