Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 포인터의 포인터(이중 포인터)를 선언하는 방법


C 언어에서 이중 포인터(double pointer), 즉 '포인터를 가리키는 포인터'를 선언하는 방법은 일반 포인터를 선언하는 것과 거의 같습니다. 차이점은 포인터 이름 앞에 별표(*)를 하나만 더 붙이면 된다는 점입니다.

문법(Syntax)

이중 포인터를 선언할 때 사용하는 기본 문법은 다음과 같습니다.

int **ptr;

위 선언에서 ptrint * 타입 변수의 주소를 저장하는 포인터입니다. 한 번 역참조(*ptr)하면 일반 포인터에 접근하고, 두 번 역참조(**ptr)하면 실제 정수 값에 도달하게 됩니다.

예제

다음은 포인터의 포인터(pointer to pointer)의 동작을 보여주는 C 프로그램입니다.

#include<stdio.h>
// 포인터의 포인터를 시연하는 C 프로그램
int main(){
    int element = 24;
    // element 변수를 가리키는 단일 포인터
    int *ptr2;
    // ptr2를 가리키는 이중 포인터
    int **ptr1;
    // element의 주소를 ptr2에 저장
    ptr2 = &element;
    // ptr2의 주소를 ptr1에 저장
    ptr1 = &ptr2;
    // 단일 포인터와 이중 포인터로 각각 값 출력
    printf("element value = %d\n", element);
    printf("element value using single pointer = %d\n", *ptr2);
    printf("element value using double pointer = %d\n", **ptr1);
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

element value = 24
element value using single pointer = 24
element value using double pointer = 24

동작 원리

ptr2에는 변수 element의 메모리 주소가 저장되고, ptr1에는 포인터 ptr2의 메모리 주소가 저장됩니다. 따라서 *ptr2element의 값(24)을 반환하며, **ptr1ptr1 → ptr2 → element 순으로 두 번 역참조하여 결국 같은 값 24에 도달하게 됩니다.

이러한 이중 포인터는 2차원 배열의 동적 할당, 함수 내에서 포인터 자체를 수정해야 하는 경우, 연결 리스트나 다차원 데이터 구조 처리 등에 널리 활용됩니다.