Multi-dimensional arrays
5.1.11· Coding › C Programming
Multi-dimensional array KIYA hota hai?
C ise "array of arrays" KYU kehta hai?
Kyunki C mein sirf 1D arrays sach mein hote hain. int a[3][4] ko int (a[3])[4] ki tarah padha jaata hai — 3 cheezein ki array, jahan har cheez int[4] hai. Yeh ek fact hi sab kuch explain karta hai jo neeche likha hai.
Ise store KAISE kiya jaata hai? (Row-major order)
C elements ko row by row rakhta hai. Ise row-major order kehte hain.
int a[3][4] ke liye, memory order kuch aisi hai:
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] ... a[2][3]

Pointer wala view (KYU a[i][j] kaam karta hai)
C mein, a[i] exactly *(a + i) hai aur a[i][j] exactly *(*(a+i)+j) hai.
Declare karna aur initialize karna
int m[2][3] = { {1, 2, 3},
{4, 5, 6} }; // explicit, sabse clear
int n[2][3] = {1, 2, 3, 4, 5, 6}; // same data, flat list (row-major fill)
int z[2][3] = {0}; // sab zero
int p[][3] = {{1,2,3},{4,5,6}}; // pehla dim infer hoga = 2; andar wala dim DENA HI PADEGAFunctions mein pass karna
void print(int rows, int cols, int a[][cols]); // C99 VLA param, ya:
void print2(int a[][4], int rows); // fixed inner dimensionKYU inner dimension(s) specify karni padti hain: function sirf ek pointer receive karta hai (a decay hokar int(*)[4] banta hai). Andar a[i][j] compute karne ke liye, compiler ko phir bhi chahiye taaki iC+j ho sake.
Recall Feynman: ek 12-saal ke bacche ko samjhao
Socho ek lambi shelf hai jisme ek line mein 12 boxes hain. Tum pretend karte ho ki yeh 3 shelves hain, har ek mein 4 boxes, taaki "row 2, box 1" bolna aasaan ho. Lekin asli mein yeh ek seedhi line hai! "Row 2, box 1" dhundhne ke liye tum count karte ho: 2 poori shelves skip karo (woh boxes hain) phir 1 aur aage jao — box number 9. Computer yahi counting trick karta hai jab bhi tum a[2][1] likhte ho. Isi liye use pata hona chahiye ki har shelf par kitne boxes hain (columns), lekin use parwah nahi kitni shelves hain.
Flashcards
C ek 2D array ko memory mein kaise store karta hai?
int a[][C] declare karte waqt ya parameter mein column size kyun specify karni padti hai (lekin row size nahi)?
= base + (i*C + j)*size; ise compute karne ke liye C chahiye lekin R kabhi nahi, isliye R chhoda ja sakta hai.T a[R][C] mein a[i][j] ka address formula kya hai, base B ke saath?
a[i][j] ko sirf pointers use karke likhो.
*(*(a + i) + j).int a[3][4] ke liye, a kis type mein decay hota hai?
int (*)[4] — 4 ints ki array ka pointer.C mein a[1,2] ka kya matlab hai aur kyun?
1,2 evaluate hokar 2 banta hai, toh matlab hai a[2] (ek puri row), element (1,2) NAHI.3D address: T a[X][Y][Z] mein a[i][j][k] ke liye index i ko kisse multiply kiya jaata hai?
int m[2][3]={1,2,3,4,5,6}; mein m[1][0] kya hai?
Connections
- C Arrays (1D) — multi-D bas ek "array of arrays" hai.
- Pointers in C — subscripting hi pointer arithmetic hai.
- Array Decay — kyun
apass hote waqtint(*)[C]ban jaata hai. - Pointer to Array vs Array of Pointers —
int (*p)[4]vsint *p[4]. - sizeof Operator — element aur poori array ka size.
- Row-major vs Column-major — C vs Fortran/MATLAB storage.
- Variable Length Arrays (C99) —
int a[][cols]parameters.