5.1.11 · HinglishC Programming

Multi-dimensional arrays

1,586 words7 min readRead in English

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]
Figure — Multi-dimensional arrays

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 PADEGA

Functions 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 dimension

KYU 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?
Ek contiguous block ke roop mein row-major order mein — pehle row 0 sab, phir row 1 sab, aur aage bhi aisa hi.
int a[][C] declare karte waqt ya parameter mein column size kyun specify karni padti hai (lekin row size nahi)?
Address = 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?
Yeh comma operator hai: 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?
(uske right wale saare dimensions ka product).
int m[2][3]={1,2,3,4,5,6}; mein m[1][0] kya hai?
4 (flat list row-major fill karta hai: row1 = {4,5,6}).

Connections

  • C Arrays (1D) — multi-D bas ek "array of arrays" hai.
  • Pointers in C — subscripting hi pointer arithmetic hai.
  • Array Decay — kyun a pass hote waqt int(*)[C] ban jaata hai.
  • Pointer to Array vs Array of Pointersint (*p)[4] vs int *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.

Concept Map

is really

because C has only

stored as

laid out by

gives formula

needs only

omits

so you must pass

indexed via

equivalent to

a+i jumps

fills

Multi-dim array

Array of arrays

1D arrays

Contiguous flat memory

Row-major order

addr = base + i*C + j *s

Column count C

Row count R

All dims except first

a i j

*( *(a+i) + j )

One full row

Initializer lists