1️⃣ 포인터 배열 (Array of Pointers)

포인터를 여러 개 저장해둔 배열

각 요소는 “주소”를 저장한다.

char *fruit[] = { "apple", "blueberry", "orange", "melon" };

요소 의미
fruit 문자열 주소들의 배열
fruit[i] i번째 문자열의 시작 주소
*fruit[i] i번째 문자열의 첫 글자

✅ 포인터 배열의 특징

방식 특징 장점
포인터 배열 (char *fruit[]) 문자열 상수 주소를 저장 메모리 낭비 없음
2차원 문자 배열 (char fruit[4][20]) 문자열을 배열 내부에 직접 저장 문자열 수정 가능하지만 메모리 낭비 큼

2️⃣ 문자열 포인터

문자열 상수는 수정 불가, 읽기만 가능

char *p = "apple";
printf("%s\n", p);     // apple


3️⃣ 이중 포인터 (Double Pointer) *p

포인터를 가리키는 포인터

int i = 200;
int *p = &i;
int **q = &p;

printf("%d %d %d", i, *p, **q);

표현 의미
i
p i의 주소
*p i의 값
q p의 주소
**q i의 값

✅ 왜 이중포인터가 필요할까?