본문 바로가기
카테고리 없음

이중 포인터 사용법 & 예제

by kangs' tong 2023. 9. 7.

이중 포인터란?

이중 포인터는 포인터를 가리키는 포인터를 의미합니다. 즉, 포인터 변수의 주소를 저장하는 변수입니다. 이중 포인터를 사용하면 포인터 변수를 간접적으로 조작할 수 있어 메모리의 효율적인 관리와 다양한 데이터 구조를 구현하는 데 도움이 됩니다.

이중 포인터 사용법

이중 포인터를 사용하기 위해서는 아래와 같은 순서로 코드를 작성해야 합니다.

  1. 이중 포인터 변수 선언
  2. 이중 포인터에 메모리 할당
  3. 이중 포인터에 값 할당
  4. 이중 포인터를 통해 값을 사용

1. 이중 포인터 변수 선언
이중 포인터를 사용하기 위해 먼저 이중 포인터 변수를 선언해야 합니다. 일반 포인터 변수와 마찬가지로 * 연산자를 사용하여 포인터임을 나타냅니다.

int** doublePtr;

2. 이중 포인터에 메모리 할당
이중 포인터에 메모리를 할당하기 위해서는 먼저 단일 포인터를 통해 메모리를 동적으로 할당한 뒤, 이를 이중 포인터에 할당해야 합니다.

int* singlePtr; // 단일 포인터 변수 선언
int value = 10;

singlePtr = &value; // 단일 포인터에 값 할당

doublePtr = &singlePtr; // 이중 포인터에 단일 포인터 변수의 주소 할당

3. 이중 포인터에 값 할당
이중 포인터에 값을 할당하기 위해서는 ** 연산자를 사용하여 이중 포인터가 가리키는 주소에 값을 저장합니다.

**doublePtr = 20; // 이중 포인터가 가리키는 주소에 값 할당

4. 이중 포인터를 통해 값을 사용
이중 포인터를 통해 값을 사용하기 위해서는 ** 연산자를 사용하여 이중 포인터가 가리키는 값에 접근합니다.

printf("%d", **doublePtr); // 이중 포인터가 가리키는 값 출력

이중 포인터 사용 예제

아래는 이중 포인터를 사용하는 예제입니다. 이중 포인터를 활용하여 정수형 배열의 합을 구하는 함수를 구현한 예제입니다.

#include <stdio.h>
#include <stdlib.h>

int sum(int** arr, int size) {
    int total = 0;
    for (int i = 0; i < size; i++) {
        total += **arr++; // 이중 포인터를 통해 배열의 값에 접근하여 합산
    }
    return total;
}

int main() {
    int* arr[3];
    int data1[4] = {1, 2, 3, 4};
    int data2[2] = {5, 6};
    int data3[3] = {7, 8, 9};

    arr[0] = data1; // 이중 포인터 너비의 배열에 단일 포인터 변수 저장
    arr[1] = data2;
    arr[2] = data3;

    int result = sum(arr, 3);
    printf("Sum: %d", result); // 45

    return 0;
}

마무리

이중 포인터는 포인터를 가리키는 포인터로, 포인터 변수의 주소를 저장하는 변수입니다. 이를 통해 포인터 변수를 간접 조작할 수 있어 메모리 관리와 다양한 데이터 구조를 구현하는 데에 유용합니다. 위 예제를 통해 이중 포인터 사용법을 살펴보았습니다. 이중 포인터는 복잡한 데이터 구조나 메모리 관리에 활용되므로, 자세한 이해와 실습을 통해 익숙해져야 합니다.

댓글