Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

จะจัดสรรอาร์เรย์ 2D ใน C แบบไดนามิกได้อย่างไร


อาร์เรย์ 2 มิติสามารถจัดสรรแบบไดนามิกใน C โดยใช้ตัวชี้เดียว ซึ่งหมายความว่าบล็อกหน่วยความจำของ size 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

ตอนนี้เรามาทำความเข้าใจโปรแกรมข้างต้นกัน

arr อาร์เรย์ 2 มิติได้รับการจัดสรรแบบไดนามิกโดยใช้ malloc จากนั้นอาร์เรย์ 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 มิติจะปรากฏขึ้น ในที่สุดหน่วยความจำที่จัดสรรแบบไดนามิกก็ว่างโดยใช้ฟรี ข้อมูลโค้ดที่แสดงเป็นดังนี้

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