Parent note ki ek bhi line padhne se pehle, tujhe usmein aane wale har word aur symbol par pakad banani hogi. Neeche har item pichle wale se build hota hai. Koi cheez use nahi hoti jab tak draw na ho.
Figure dekh: aath chote switches (bits) ek box ke andar baithe hain. Har switch ya toh OFF (0) hai ya ON (1). Aath switches 28=256 patterns dete hain, toh ek byte 0 se 255 tak hold karta hai.
Topic ko iske zaroort kyun hai: ek union ko poori tarah kitne bytes har member leta hai aur kaunse bytes overlap hote hain — inhi terms mein describe kiya jaata hai. Agar "byte" fuzzy hai, toh baad ki saari cheez fuzzy rahegi.
Figure mein red box offset 0 par hai — object ki bilkul pehli box. Parent note baar baar kehta hai "all members start at the same address (offset 0)". Yeh picture usi sentence ko represent karti hai.
chaar bytes as a decimal, ek special bit layout use karke
double
8
aath bytes as a more precise decimal
Topic ko iske zaroort kyun hai: parent ki key warning — koi alag member padhna raw bits ko reinterpret karta hai, convert nahi karta — exactly "same boxes, different ruler" hai.
Notation padhna:sizeof(union Mix) == 8 ka matlab hai "union measure karne par 8 boxes milte hain." Yahan == C ka is-it-equal? test hai, true/false deta hai — assignment nahi.
Figure mein har member ke bytes offset 0 se stack hote hain. Red bar sabse bada member hai — uski length room ka size set karti hai, kyunki room ko worst case (sabse bada tenant) ke liye survive karna hoga.
max kyun, ∑ (sum) kyun nahi? Ek struct member sizes add karta hai kyunki members alag-alag boxes mein baithe hote hain (sum). Ek union unhe ek hi boxes par overlap karta hai, toh sirf sabse lamba wala matter karta hai (max). Woh ek choice — sum vs max — hi poora fark hai. Dekho Structs — separate memory for each member.
Topic ko iske zaroort kyun hai: parent likhta hai "(plus padding for alignment)" aur kabhi explain nahi karta. Ab tujhe pata hai: padding woh rounding-up hai taaki unions ki arrays ka har element ek legal address par rahe. Poori story: Memory alignment and padding.
65 number ek int mein, hex mein, 00 00 00 41 hai (sirf aakhri byte mein value hai). Figure little-endian ko dikhata hai ise 41 00 00 00 ki tarah rakhte hue — red 41 box 0 mein land karta hai. Toh box 0 ko char ke roop mein padhne par 0x41 = 'A' milta hai. Yahi exactly parent ka u.c[0] == 'A' example hai. Aur gehrai ke liye: Endianness — byte order.
Topic ko iske zaroort kyun hai: parent ka type-punning example tab tak samajh nahi aata jab tak pata na ho ki 'A' c[0] par kyun aata hai, c[3] par kyun nahi.