Arrays and pointers — array name decays to pointer
5.1.10· Coding › C Programming
WHAT is "decay"?
Teen famous exceptions jahan decay NAHI hoti (naam poori array rehti hai):
- ==
sizeof arr== → poori array ke total bytes deta hai, pointer size nahi. - ==
&arr== →T(*)[N]deta hai, poori array ka pointer,T**nahi. - String literal jo
char[]ko initialize karne ke liye use hota hai (wahan woh array hi rehta hai).
WHY does C do this?
HOW does indexing actually work? (derive from scratch)
Hum claim karte hain ki arr[i] ko *(arr + i) ke roop mein define kiya gaya hai. Ise build karte hain.
Step 1 — arr + i mein arr kya hai?
Yeh step kyun? Expression arr + i mein, arr ek value ke roop mein use ho raha hai → yeh decay ho ke &arr[0] ban jaata hai, type T*.
Step 2 — Pointer arithmetic element size ke hisaab se scale hoti hai.
Yeh step kyun? T* mein i add karna i bytes add nahi karta; yeh i elements add karta hai. Compiler ko sizeof(T) pata hota hai, isliye:
Step 3 — Dereference.
Yeh step kyun? *(arr + i) us computed address pe stored T ko read karta hai — exactly -vaan element.
Toh C standard ke according:

Worked Examples
Common Mistakes (Steel-man)
Flashcards
"Array decays to pointer" ka matlab kya hai?
T[N] automatically T* mein convert ho jaata hai jo &arr[0] ke barabar hota hai.Woh 3 contexts kaun se hain jahan array decay NAHI hoti?
sizeof arr, &arr, aur ek string literal jo char[] initialize karta hai.C mein arr[i] ko kya define kiya gaya hai?
*(arr + i) — pure pointer arithmetic.3[arr] compile kyun hota hai aur arr[3] ke barabar kyun hai?
arr[i] == *(arr+i) == *(i+arr) == i[arr]; addition commutative hai.void f(int arr[]) ke andar arr ki real type kya hai?
int * — parameter array syntax pointer mein rewrite ho jaata hai; size info kho jaati hai.int a[10] ke liye sizeof(a)? Aur int *p=a ke liye sizeof(p)?
int arr[5] ke liye arr vs &arr ki type?
int* vs int(*)[5].p vs &arr ke liye pointer +1 alag byte-distances kyun move karta hai?
int* ke liye 4 bytes vs int(*)[5] ke liye 20 bytes.Kya tum arr = p; likh sakte ho? Kya tum p = arr; likh sakte ho?
Recall Feynman: explain to a 12-year-old
Imagine karo ek platform pe khadi 10 bogion wali train. Train ke side pe painted naam bas yeh batata hai "is train ka agla hissa yahaan hai." Jab tum apne dost ko train ka naam bata ke describe karte ho, tum actually sirf woh jagah point kar rahe ho jahan se woh shuru hoti hai — woh wahaan se bogiyaan ginta hua chal sakta hai. Yahi "front ko point karna" decay hai: naam arrow ban jaata hai jo box #0 ki taraf point karta hai. Lekin agar tum poochho "poori train kitni lambi hai?" (sizeof), toh station ka map jaanta hai ki woh 10 bogiyaan hain — yeh khaas sawaal arrow se bewakoof nahi hota.
Connections
- Pointer Arithmetic — decay ki wajah se hi
arr+ikaam karta hai. - Passing Arrays to Functions — decay ka practical fallout.
- sizeof Operator — decay ka #1 exception.
- Multidimensional Arrays — decay sirf outermost dimension ko peel karta hai (
int[3][4]→int(*)[4]). - Strings in C —
char*vschar[]aur literal decay. - Memory Layout and Addresses — contiguous boxes yeh sab underlie karte hain.