एक एकल सूचक का उपयोग करके C में एक 2D सरणी को गतिशील रूप से आवंटित किया जा सकता है। इसका मतलब है कि आकार पंक्ति*कॉलम*डेटाटाइपसाइज का एक मेमोरी ब्लॉक मॉलोक का उपयोग करके आवंटित किया जाता है और मैट्रिक्स तत्वों तक पहुंचने के लिए पॉइंटर अंकगणित का उपयोग किया जा सकता है।
इसे प्रदर्शित करने वाला एक कार्यक्रम इस प्रकार दिया गया है।
उदाहरण
#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-डी सरणी गिरफ्तारी को मॉलोक का उपयोग करके गतिशील रूप से आवंटित किया जाता है। फिर 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);