5.1.26 · D1 · Coding › C Programming › Typedef
EK core idea: typedef kisi already-existing type ko doosra naam deta hai — kuch naya create nahi hota, sirf ek nickname milta hai. Koi bhi typedef padhne ke liye, aap typedef word ko cover karo, line ko ek ordinary variable declaration samjho, aur jo "variable name" milta hai wahi naya type name hai.
Iss trick par trust karne se pehle, tumhe exactly pata hona chahiye ki ek type , ek declaration , ek variable name , ek *, ek struct, aur ek function pointer kya hote hain — pictures mein, sirf words mein nahi. Yeh page inhe sab zero se build karta hai, uss order mein jo parent note ko chahiye.
Ek type woh label hai jo compiler memory ke ek box par lagata hai, jo do cheezein batata hai: box kitne bytes ka hai, aur andar ke bits ko kaise interpret karna hai (whole number, character, address, ... ke roop mein).
Figure dekho: memory ke wahi 4 bytes alag-alag matlab rakh sakte hain depending on the type label unpar lagi ho. Label hi type hai; bits same hain.
Yeh topic ko kyun chahiye? Kyunki typedef kabhi box ko touch nahi karta — yeh sirf ek naya sticker banata hai jo tum usi size aur meaning ke boxes par laga sako. "Type = size + interpretation" jaanna hi woh cheez hai jo tumhe confidently kehne deta hai: ek alias box ke baare mein kuch nahi badalta, sirf uska naam badalta hai.
Ek declaration ek sentence hai jo compiler ko batata hai: "is type ka ek box banao, aur mujhe ise is naam se refer karne do."
type int name x ;
Yahan x variable name hai — woh human word jisse hum us box tak pahunchte hain.
Neecha diya picture anatomy dikhata hai: left mein type, middle mein naam, right mein semicolon jo sentence khatam karta hai.
Topic ko yeh kyun chahiye: typedef literally ek declaration hai jisme aage ek extra word hota hai . Agar tum plain declaration mein "naam kahan rehta hai" point kar sako, to tum typedef mein "naya type naam kahan rehta hai" point kar sakte ho. Yeh single skill parent note ke har example ko decode kar deta hai.
Worked example Woh ek move jo sab unlock kar deta hai
int x; lo. Aage typedef lagao → typedef int Integer;. Jahan x hota tha ab wahan Integer hai, aur Integer int ka ek naya naam ban jaata hai. Same shape, ek word add kiya.
Declaration mein symbol ==*== ka matlab hai "pointer to" — ek aisa box jiske contents kisi doosre box ka address hain, khud koi value nahi. int *p; padhte hain "p is a pointer to int". Dekho Pointers in C .
Address sirf memory ka ek house number hai. Figure mein, box p mein 5 nahi hai; usmein ek arrow (address) hai jo us box ki taraf point karta hai jisme 5 hai.
* NAME se bind hota hai, type se nahi
Log kyun confuse hote hain: int *p; mein lagta hai ki * int ka hissa hai.
Sachai: yeh p se bind hota hai. Isliye int *a, b; mein sirf a pointer banta hai aur b plain int rehta hai. Yahi wajah hai ki typedef int* IntPtr; IntPtr a, b; dono ko pointer banata hai — * alias mein bake ho gaya, isliye ab woh alag nahi ho sakta. Yeh yaad rakhna; parent note ka Example 3 poori tarah isi par depend karta hai.
Ek ==struct== kai boxes (jinhe members kehte hain) ko ek bade box mein glue karta hai. struct Point { int x, y; }; ek aisa box define karta hai jo do ints rakhta hai jinke naam x aur y hain. Dekho Structures in C .
struct ke baad aane wala word — yahan Point — tag kehlata hai. C mein tag ek alag namespace mein rehta hai, isliye full type name do words struct Point hai, sirf Point nahi.
Har baar "do words" likhna tedious hai, aur yahi woh itch hai jo typedef struct Point Point; scratch karta hai: yeh tumhe struct word chhod kar sirf Point p; likhne deta hai.
Ek function pointer ek aisa box hai jo kisi function ka address rakhta hai, taaki tum us function ko iske through call kar sako. Iska type likha jaata hai
int (*Operation)(int, int)
padhte hain "Operation is a pointer to a function taking two ints and returning int". Dekho Function Pointers .
Figure ko left-to-right decode trick se padhdo: parentheses (*Operation) * ko naam ke saath group karte hain (matlab yeh pointer hai), trailing (int, int) kehta hai "two ints wali function ki taraf", aur leading int kehta hai "returning int".
Topic ko yeh kyun chahiye: yeh notation famously unreadable hai. typedef ise ek clean word Operation ke peeche chhupaata hai, to Operation table[4]; (char aisi functions ka array) turant samajh aata hai. Yeh typedef ke exist karne ka sabse strong argument hai.
==#define== ek preprocessor command hai: compiler chalne se pehle hi, yeh tumhare text par blind find-and-replace karta hai. #define uint unsigned int literally unsigned int paste karta hai jahan bhi uint dikhe.
#define typedef NAHI hai
Text replacement ko *-binds-to-name rule ka koi idea nahi. #define INTPTR int* aur phir INTPTR a, b; expand hoga int* a, b; → a pointer hai, b plain int hai. Lekin typedef int* IntPtr; aur phir IntPtr a, b; dono ko pointer banata hai, kyunki compiler alias ko ek puri type ke roop mein samajhta hai. Inhe side by side rakhna — parent note ka central lesson yahi hai.
Type is size plus interpretation
Declaration gives a box a name
Asterisk means pointer to
struct bundles boxes under a tag
Function pointer holds a functions address
Cover typedef read as declaration
typedef makes a new name for a type
hash define is blind text replace
Ek type kis cheez se bana hota hai (do cheezein)? Bytes mein size plus bits interpret karne ka rule.
int x; mein, kaun sa word type hai aur kaun sa naam?int type hai, x variable name hai.
typedef ke liye one-move decode trick kya hai?typedef word cover karo, baaki ko variable declaration ki tarah padho; "variable name" hi naya type name hai.
Declaration mein * ka kya matlab hai, aur yeh kisse bind hota hai? "Pointer to"; yeh naam se bind hota hai, base type se nahi.
int *a, b; mein a aur b kya hain?a hai int *, b plain int hai.
Point p; ki jagah struct Point p; kyun likhna padta hai?Tag Point struct namespace mein rehta hai, isliye full type name do words struct Point hai.
int (*Operation)(int,int) ko words mein padho.Operation ek function ki taraf pointer hai jo do ints leta hai aur int return karta hai.
#define aur typedef mein core difference kya hai?#define blind preprocessor text replacement hai; typedef ek real compiler-level type alias hai jo *-binds-to-name rule samajhta hai.
Parent: Typedef — yeh page har woh symbol supply karta hai jo woh note assume karta hai.
Structures in C — §3 se struct/tag foundation.
Pointers in C — §2 se * foundation.
Function Pointers — §4 mein tamed ugly type.
Linked Lists — jahan typedef struct node Node; pay off karta hai.
5.1.26 Typedef (Hinglish) — same ideas Hinglish mein.