সি-তে একটি ২D অ্যারে একটি সিঙ্গেল পয়েন্টার ব্যবহার করে ডাইনামিক্যালি অ্যালোকেট করা যায়। এর মানে হলো malloc ব্যবহার করে row*column*dataTypeSize আকারের একটি মেমরি ব্লক অ্যালোকেট করা হয় এবং পয়েন্টার অ্যারিথমেটিক ব্যবহার করে ম্যাট্রিক্স এলিমেন্টগুলো অ্যাক্সেস করা হয়।
এটি প্রদর্শন করে একটি প্রোগ্রাম নিচে দেওয়া হলো।
উদাহরণ
#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
এখন উপরের প্রোগ্রামটি বুঝি।
২-D অ্যারে arr malloc ব্যবহার করে ডাইনামিক্যালি অ্যালোকেট করা হয়েছে। তারপর ২-D অ্যারেটি নেস্টেড ফর লুপ এবং পয়েন্টার অ্যারিথমেটিক ব্যবহার করে ইনিশিয়ালাইজ করা হয়েছে। এটি দেখানো কোড স্নিপেট নিচে:
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;
তারপর ২-D অ্যারে ভ্যালুগুলো প্রদর্শন করা হয়েছে। অবশেষে ডাইনামিক্যালি অ্যালোকেটেড মেমরি 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);