[C언어/C++] 이중 포인터 사용법 & 예제

다중 포인터란 2차원 이상의 포인터 변수를 의미합니다. 포인터 변수도 메모리위에 올라가야하기에 주소값이 있습니다. 이러한 포인터의 메모리 주소값을 참조하는 포인터의 포인터를 이중 포인터라고 하며 이런 원리로 무한대의 다차원 포인터를 만들 수 있습니다. 다만 이중포인터까지만 종종 사용되고 실질적으로 2차원을 넘어서는 고차원 포인터는 잘 사용되지 않습니다.

 

이중 포인터

 

이중포인터 사용법

int **ptr = NULL;

포인터를 선언할 때 ** 이런식으로 자료형 뒤에 *을 두 번 사용하면 포인터의 포인터(이중 포인터)를 선언할 수 있습니다.

 

이중 포인터 사용 예제

#include <stdio.h>

void main()
{
    char ch = 'A';
    char* ptr = NULL;
    char** ptr2 = NULL;
    
    ptr = &ch; // ptr->ch
    ptr2 = &ptr; // ptr2 -> ptr
    
    printf("ch : %c\n", ch);       //ch 값 출력
    printf("ptr : %p\n", ptr);     //ptr 값 출력
    printf("ptr2 : %p\n\n", ptr2); //ptr2 값 출력
    
    printf("ch 주소: %p\n", &ch);       //ch 주소 출력
    printf("ptr 주소: %p\n", &ptr);     //ptr 주소 출력
    printf("ptr2 주소: %p\n\n", &ptr2); //ptr2 주소 출력
    
    printf("ch 참조값: %c\n", ch);            //ch 값 출력
    printf("ptr 참조값: %c\n", *ptr);         //ptr 참조 값 출력
    printf("ptr2 참조값: %p\n", *ptr2);       //ptr2 참조 값 출력
    printf("ptr2 이중 참조값: %c\n", **ptr2); //ptr2 이중 참조 값 출력
}

이중 포인터 예제

위의 예제에서 확인하실 수 있듯 char변수 ch의 주소값을 포인터 변수 ptr이 참조하고 있고 이 ptr 포인터 변수의 주소값을 또다시 이중 포인터 ptr2가 참조하고 있습니다. 이중 포인터에서 이를 역참조하면 char변수 ch까지 접근이 가능합니다.

 

댓글

Designed by JB FACTORY