이중 포인터(Double Pointer)
이중 포인터(Double Pointer)는 C 언어에서 포인터의 주소를 저장하는 포인터입니다. 즉, 이중 포인터는 포인터 변수의 주소를 가지는 포인터로, 이중 포인터를 통해 포인터 변수에 대한 간접 참조를 할 수 있습니다.
이중 포인터는 주로 함수의 인자로 포인터를 전달하거나, 동적 메모리 할당을 위해 사용됩니다. 이중 포인터는 한 단계 간접 참조의 제한을 풀어 포인터 변수를 수정할 수 있게 합니다.
이중 포인터 사용법
이중 포인터를 정의하려면 포인터 변수를 정의할 때와 동일한 *
연산자를 사용하여 2개의 *
를 붙입니다. 예를 들어, int
형식의 이중 포인터를 정의하려면 다음과 같이 작성합니다.
int **p;
이중 포인터 변수를 사용하여 메모리에 대한 참조를 저장하려면, 이중 포인터 변수에 메모리 주소를 할당해야 합니다. 예를 들어, int
형식의 변수에 대한 포인터를 생성하고 값을 할당하려면 다음과 같이 작성할 수 있습니다.
int *ptr;
int val = 10;
ptr = &val;
이제 ptr
은 val
변수의 주소를 가지고 있습니다. 이를 이중 포인터를 사용하여 이전에 할당한 포인터 변수를 참조하기 위해 다음과 같이 작성할 수 있습니다.
int **pptr;
pptr = &ptr;
이중 포인터 예제
이중 포인터가 사용되는 일반적인 예 중 하나는 메모리 동적 할당입니다. 이 예제에서는 이중 포인터를 사용하여 2차원 배열을 동적으로 할당합니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows, cols;
scanf("%d %d", &rows, &cols);
// 이중 포인터로 2차원 배열 동적 할당
int **arr = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
}
// 이중 포인터로 2차원 배열 초기화 및 출력
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = i * cols + j;
printf("%d ", arr[i][j]);
}
printf("\n");
}
// 이중 포인터로 2차원 배열 해제
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
이 예제에서는 사용자로부터 행과 열의 개수를 입력받아 2차원 배열을 동적으로 할당합니다. 그런 다음, 이중 포인터를 사용하여 2차원 배열을 초기화하고 출력한 뒤, 할당한 메모리를 해제합니다.
이중 포인터를 사용하면 포인터 변수에 대한 간접 참조를 통해 포인터 변수의 값을 조작하고, 동적 메모리 할당 시 많은 유연성을 제공하는 등 다양한 용도로 활용할 수 있습니다. 적절한 상황에서 이중 포인터를 사용하여 작업을 효율적으로 처리할 수 있도록 익혀두는 것이 좋습니다.
댓글