C

포인터 배열

1space 2025. 6. 13. 20:35

포인터 배열이란?

int *p[5];

이 선언의 의미는 다음과 같습니다:

“정수형(int)을 가리킬 수 있는 포인터 변수 5개를 배열로 선언한다.”

  • p는 배열입니다.
  • p[0], p[1], ..., p[4]는 각각 int형을 가리킬 수 있는 포인터 변수입니다.

즉, p[0], p[1], p[2] … 하나하나가 다음선언과 같습니다:

int *p0;
int *p1;
int *p2;
...

→ 이들을 하나의 배열로 묶은 것이 int *p[5];입니다.

 

포인터 배열과 일반 배열의 차이

일반 배열:

int arr[5]; // 정수형 5개짜리 배열

포인터 배열:

int *p[5]; // int형 포인터 5개짜리 배열
  • 일반 배열은 값을 저장
  • 포인터 배열은 주소(다른 변수를 가리키는 주소)를 저장

 

포인터 배열의 동작 방식

예시 코드:

int a = 3; p[1] = &a; // p[1]은 a의 주소를 저장 (p[1]이 a를 가리킨다)

이후 다음과 같이 접근할 수 있습니다:

printf("%p\n", p[1]); // 주소 출력 (a의 주소)
printf("%d\n", *p[1]); // 값 출력 (a가 가진 값 = 3)

 

꼭 기억할 것

💡 p[1]은 포인터입니다. *p[1]은 p[1]이 가리키는 메모리 값(즉, 변수 a의 값)입니다.

이해 포인트:

  • p[1] = 주소 (예: 0x100)
  • *p[1] = 그 주소에 저장된 값 (예: 3)

 

혼동 주의! *p[0], *p[1] 표현

포인터 배열에서는 반드시 이렇게 생각하세요:

  • p[0]은 포인터 변수 (주소 저장)
  • *p[0]은 그 주소에 접근한 값

📌 절대 *p[0]이 "p의 0번째 값"이라는 식으로 혼동하면 안 됩니다!
*는 역참조로, 주소를 따라가서 "실제 값"을 꺼내는 역할입니다.

 

예제

int a = 3;
int *p[5];     // 포인터 배열 선언
p[1] = &a;     // p[1]이 a를 가리킴

printf("%p\n", p[1]);    // 주소 출력 → &a
printf("%d\n", *p[1]);   // 값 출력   → 3

 

전체 정리

int *p[5] 포인터 변수 5개를 묶은 배열
p[1] int형 변수의 주소를 저장 가능
p[1] = &a p[1]이 변수 a를 가리킴
*p[1] a의 값 (역참조)
p[1] a의 주소

'C' 카테고리의 다른 글

포인터 상수  (0) 2025.06.14
2차원 배열  (0) 2025.06.14
다중 포인터  (0) 2025.06.13
배열을 함수에 전달할때 동작방식  (0) 2025.06.13
배열과 포인터  (0) 2025.06.13