อาร์เรย์ 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);