이중 포인터란?
이중 포인터는 포인터를 가리키는 포인터를 의미합니다. 즉, 포인터 변수의 주소를 저장하는 변수입니다. 이중 포인터를 사용하면 포인터 변수를 간접적으로 조작할 수 있어 메모리의 효율적인 관리와 다양한 데이터 구조를 구현하는 데 도움이 됩니다.
이중 포인터 사용법
이중 포인터를 사용하기 위해서는 아래와 같은 순서로 코드를 작성해야 합니다.
- 이중 포인터 변수 선언
- 이중 포인터에 메모리 할당
- 이중 포인터에 값 할당
- 이중 포인터를 통해 값을 사용
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;
}
마무리
이중 포인터는 포인터를 가리키는 포인터로, 포인터 변수의 주소를 저장하는 변수입니다. 이를 통해 포인터 변수를 간접 조작할 수 있어 메모리 관리와 다양한 데이터 구조를 구현하는 데에 유용합니다. 위 예제를 통해 이중 포인터 사용법을 살펴보았습니다. 이중 포인터는 복잡한 데이터 구조나 메모리 관리에 활용되므로, 자세한 이해와 실습을 통해 익숙해져야 합니다.
댓글