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);