2D 배열은 단일 포인터를 사용하여 C에서 동적으로 할당될 수 있습니다. 즉, row*column*dataTypeSize 크기의 메모리 블록이 malloc을 사용하여 할당되고 포인터 산술을 사용하여 행렬 요소에 액세스할 수 있습니다.
이를 보여주는 프로그램은 다음과 같습니다.
예
#include <stdio.h>
#include <stdlib.h>
int main() {
int row = 2, col = 3;
int *arr = (int *)malloc(row * col * sizeof(int));
int i, j;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
*(arr + i*col + j) = i + j;
printf("The matrix elements are:\n");
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d ", *(arr + i*col + j));
}
printf("\n");
}
free(arr);
return 0;
}
위 프로그램의 출력은 다음과 같습니다.
The matrix elements are: 0 1 2 1 2 3
이제 위의 프로그램을 이해합시다.
2차원 배열 arr은 malloc을 사용하여 동적으로 할당됩니다. 그런 다음 중첩 for 루프 및 포인터 산술을 사용하여 2차원 배열이 초기화됩니다. 이를 보여주는 코드 스니펫은 다음과 같습니다.
int row = 2, col = 3;
int *arr = (int *)malloc(row * col * sizeof(int));
int i, j;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
*(arr + i*col + j) = i + j;
그런 다음 2차원 배열의 값이 표시됩니다. 마지막으로 동적으로 할당된 메모리는 free를 사용하여 해제됩니다. 이를 보여주는 코드 스니펫은 다음과 같습니다.
printf("The matrix elements are:\n");
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d ", *(arr + i*col + j));
}
printf("\n");
}
free(arr);