C भाषा तीन (या अधिक) आयामों की सरणियों की अनुमति देती है। इसे बहुआयामी सरणी (Multidimensional Array) कहा जाता है। सटीक सीमा कंपाइलर द्वारा निर्धारित की जाती है।
सिंटैक्स
datatype array_name[size1][size2]...[sizeN];
उदाहरण के लिए, तीन-आयामी सरणी के लिए:
int a[3][3][3];
एलिमेंट्स की संख्या = 3*3*3 = 27 एलिमेंट्स
उदाहरण प्रोग्राम
#include <stdio.h>
int main() {
int a[2][2][2] = {1, 2, 3, 4, 5, 6, 7, 8};
int i, j, k;
printf("Elements of the array are:\n");
for(i = 0; i < 2; i++) {
for(j = 0; j < 2; j++) {
for(k = 0; k < 2; k++) {
printf("%d ", a[i][j][k]);
}
}
}
return 0;
}
आउटपुट
Elements of the array are: 1 2 3 4 5 6 7 8
व्याख्या
a[2][2][2]- 3 आयाम: 2 प्लेन्स, प्रत्येक 2x2- मेमोरी में रैखिक रूप से संग्रहीत:
a[0][0][0],a[0][0][1],a[0][1][0],a[0][1][1],a[1][0][0]... - आरंभीकरण सूची रैखिक क्रम का पालन करती है।
मेमोरी लेआउट (3D)
Plane 0 (i=0): Plane 1 (i=1): a[0][0][0] a[0][0][1] a[1][0][0] a[1][0][1] a[0][1][0] a[0][1][1] a[1][1][0] a[1][1][1] Index order: 0,1,2,3, 4,5,6,7
पॉइंटर अंकगणित के साथ एक्सेस
int a[2][3][4]; int *p = &a[0][0][0]; // a[i][j][k] एक्सेस करने के लिए: *(p + (i * 3 * 4) + (j * 4) + k) // सामान्य फॉर्मूला N-डायमेंशन के लिए: offset = i1*(d2*d3*...*dN) + i2*(d3*...*dN) + ... + iN
व्यावहारिक उपयोग के मामले
- 3D: 3D ग्राफिक्स (वॉक्सेल्स), मेडिकल इमेजिंग (MRI/CT स्लाइस), गेम मैप्स
- 4D: टाइम-सीरीज 3D डेटा, टेंसर ऑपरेशन्स (डीप लर्निंग)
- 2D: मैट्रिक्स, इमेज प्रोसेसिंग, स्प्रेडशीट्स, बोर्ड गेम्स
डायनामिक बहुआयामी सरणी
रनटाइम पर आकार के लिए:
// 3D डायनामिक आवंटन
int ***arr = malloc(d1 * sizeof(int**));
for(int i = 0; i < d1; i++) {
arr[i] = malloc(d2 * sizeof(int*));
for(int j = 0; j < d2; j++) {
arr[i][j] = malloc(d3 * sizeof(int));
}
}
// एक्सेस: arr[i][j][k]
// मुक्त करना: रिवर्स ऑर्डर में free()
नोट
- स्टैक पर बड़ी बहुआयामी सरणी स्टैक ओवरफ्लो का कारण बन सकती है।
- बड़े डेटा के लिए हीप आवंटन (
malloc) या स्टैटिक/ग्लोबल घोषणा उपयोग करें। - प्रदर्शन के लिए, सन्निहित (contiguous) आवंटन कैश-फ्रेंडली है।