Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C에서 2D 배열을 동적으로 할당하는 방법은 무엇입니까?

<시간/>

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