C

다중 포인터

1space 2025. 6. 13. 19:44

포인터 한 단계

int a = 5; 
int *p = &a;
a 정수형 변수, 값은 5
p 포인터 변수, a의 주소를 저장함 (p = &a)
*p p가 가리키는 곳의 값을 참조 → 즉 *p = a = 5
 

 

이중 포인터

int **p2 = &p;
  • p2는 포인터의 포인터입니다.
  • p2는 p의 주소를 저장합니다. 즉, p2가 가리키는 대상은 포인터 p입니다.
p2 p의 주소
*p2 a의 주소
**p2 5

 

삼중 포인터

int ***p3 = &p2;
  • p3는 포인터의 포인터의 포인터입니다.
  • p3는 p2의 주소를 저장합니다.
p3 p2의 주소
*p3 p의 주소
**p3 a의 주소
***p3 5
 
a     → 5
p     → &a
p2    → &p
p3    → &p2
  • 화살표는 “가리킴”을 의미합니다.
  • 박스 구조로 변수들이 메모리에서 가리키는 관계를 시각화한 것입니다.

예시 흐름:

p3 → p2 → p → a → 5

즉,

  • ***p3 == **p2 == *p == a == 5

 

이중 포인터의 역참조를 연습하는 부분입니다:

표현 의미 해석
*p2 p p2는 p의 주소니까
**p2 a의 값 *p == a == 5
*p3 p2 p3는 p2의 주소니까
**p3 p *p2와 같음
***p3 a의 값 5 가장 깊이 있는 값을 꺼냄
 

→ 이걸 통해 “*을 하나 더 붙일수록 한 단계 더 들어간다”는 걸 알 수 있습니다.

 

몇 개의 *가 필요한가?

어떤 변수의 주소를 저장하려면 그 변수보다 *를 하나 더 붙여야 한다.

저장 대상  선언 방식 예시
int 변수 a의 주소 int *p; p = &a;
int *p의 주소 int **p2; p2 = &p;
int **p2의 주소 int ***p3; p3 = &p2;

 

*의 개수는 몇 번의 참조를 할 수 있는가?

*p 한 번 참조 → a의 값
**p2 두 번 참조 → a의 값
***p3 세 번 참조 → a의 값
 

 

결론

  • 포인터는 “가리킨다” → 주소를 저장한다.
  • 주소를 저장하려면 *를 하나 더 붙여야 한다.
  • 역참조(*)의 횟수는 주소를 따라 몇 번 따라가야 하는지를 뜻한다.
  • ***p3 = 5가 된다는 건 p3 → p2 → p → a → 5라는 구조로 연결되어 있다는 뜻입니다.

'C' 카테고리의 다른 글

2차원 배열  (0) 2025.06.14
포인터 배열  (0) 2025.06.13
배열을 함수에 전달할때 동작방식  (0) 2025.06.13
배열과 포인터  (0) 2025.06.13
Call by Value vs Call by Address  (0) 2025.06.13