Computer >> Máy Tính >  >> Lập trình >> lập trình C

Làm cách nào để phân bổ động một mảng 2D trong C?

Một mảng 2D có thể được cấp phát động trong C bằng một con trỏ duy nhất. Điều này có nghĩa là một khối bộ nhớ có kích thước hàng * cột * dataTypeSize được cấp phát bằng cách sử dụng malloc và số học con trỏ có thể được sử dụng để truy cập các phần tử ma trận.

Một chương trình chứng minh điều này được đưa ra như sau.

Ví dụ

#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;
}

Kết quả của chương trình trên như sau.

The matrix elements are:
0 1 2 
1 2 3

Bây giờ chúng ta hãy hiểu chương trình trên.

Arr mảng 2-D được cấp phát động bằng cách sử dụng malloc. Sau đó, mảng 2-D được khởi tạo bằng cách sử dụng vòng lặp for và số học con trỏ lồng nhau. Đoạn mã hiển thị điều này như sau.

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; 

Sau đó, các giá trị của mảng 2-D được hiển thị. Cuối cùng, bộ nhớ được cấp phát động được giải phóng bằng cách sử dụng miễn phí. Đoạn mã hiển thị điều này như sau.

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