5.1.22 · D3 · HinglishC Programming

Worked examplesStructures — declaration, accessing members (. and - - )

3,953 words18 min read↑ Read in English

5.1.22 · D3 · Coding › C Programming › Structures — declaration, accessing members (. and - - )

Shuru karne se pehle: do words jinpar hum baar baar rely karenge.


The scenario matrix

Neeche un saare case-classes ki poori list hai jisme ek member access pad sakta hai. Baad ke har example par un cell(s) ka tag hai jo wo cover karta hai, taaki tum grid fill hote dekh sako.

# Case class Isme kya tricky hai Covered by
A Plain value, single-level baseline — sirf . Ex 1
B Pointer to value, single-level . nahi, -> use karna padega Ex 2
C . aur -> ek hi result dete hain prove karna ki p->m == (*p).m Ex 3
D Nested struct, all values dots ki chain e.when.d Ex 4
E Nested struct via a pointer pehla hop ->, phir . Ex 4
F Array of structs (value access) pehle index, phir dot Ex 5
G Pointer walking an array of structs -> jab pointer move karta hai Ex 6
H Function caller ke struct ko modify kare kyun &a + andar -> Ex 7
I Degenerate: zero-initialised / "empty" struct struct value 0 par kaisi dikhti hai Ex 8
J Real-world word problem ek kahani ko structs mein translate karo Ex 9
K Exam twist: *p.m vs (*p).m precedence trap operator binding Ex 10
L Field jo khud ek pointer-to-struct hai . phir -> chained Ex 11
M Degenerate: -> null / uninitialised pointer ke through undefined behaviour / crash Ex 12

Case A — the baseline

Neeche ki figure exactly yahi draw karti hai: object a outer red box hai, aur x aur y do alag inner black slots hain. Notice karo ki dono slots kabhi overlap nahi karte — isliye a.x set karne se a.y akela rehta hai. Har arrow ko slot se neeche label a.x / a.y tak trace karo jo tumhe wahan pahunchne ke liye likhna padega.


Case B — object ki jagah pointer

Figure mein, baayein taraf ka red box p hai — usme Point nahi, &a hai. Red arrow woh "travel" step hai jo p->x koi bhi member touch karne se pehle perform karta hai; use across follow karo real object a tak jo daayein taraf hai, jahan x 10 ho gaya hai.


Case C — dono forms sach mein equal hain


Cases D & E — nesting


Case F — array of structs, value access

Figure teen struct values ko side by side rakhti hai. Har box mein red y field woh hai jo loop pull out karta hai; har box ke neeche red arrow ko exact access expression pts[i].y tak follow karo. Upar red mein running total woh hai jo sum accumulate karta hai.


Case G — array ke through sweep karta pointer

Figure q ko ek red marker ke roop mein dikhati hai jo array ke upar hop karta hai. Har red q++ arrow ek poore struct ki jump hai — kabhi single byte nahi — isliye marker har baar cleanly agle box ke start par land karta hai.

q++ kyun sizeof se jump karta hai aur 1 se nahi, iske liye dekho Pointers in C.


Case H — caller tak wapas pahunchna

By-value vs by-pointer trade-offs ke liye dekho Passing Structures to Functions.


Case I — the degenerate / zero case


Case J — the word problem


Case K — exam precedence trap


Case L — ek field jo khud pointer-to-struct hai

Figure mein flip action mein dikhti hai: c ek plain box hai (. se reach hota hai), lekin uska when slot ek red arrow (ek address) hold karta hai jise tumhe -> se follow karna padta hai separate today object par land karne ke liye.


Case M — dangerous degenerate: -> ek bad pointer par


Recall Quick self-test

struct Node *n; diya, member data kaise padhoge? ::: n->data (n ek pointer hai → arrow) struct Node arr[5]; diya, element 2 ka data kaise padhoge? ::: arr[2].data (indexing ek value deta hai → dot) struct Point *q par q++ ek 1-byte step kyun NAHI hai? ::: Yeh sizeof(struct Point) se scale karta hai isliye agla poora struct milta hai. = {0} ek struct ke liye kya guarantee karta hai? ::: Har member zero-initialised hai (empty string, 0, 0.0). Agar c.when ek struct Date * hai, to uska d kaise padhoge? ::: c.when->d — field tak dot, phir pointer ke through arrow. p jab NULL ho to p->d catastrophic kyun hai? ::: -> pehle dereference karta hai; "kahin nahi" address par object padhna undefined behaviour hai (usually crash).


Connections

  • Pointers in C — har fork ka address side, q++ scaling, aur null/uninitialised pointer dangers.
  • Arrays vs Structures — Ex 5 & 6 dono mix karte hain: ek array of structs.
  • Linked Lists — Ex 11 & 12 ka pointer-inside-struct ek node ka seed hai; traversal null ke against guard karta hai.
  • typedef — in type names se struct hatao.
  • Memory Alignment & Padding — kyun q++ padding bytes bhi skip kar sakta hai.
  • Passing Structures to Functions — Ex 7 poori tarah se.
  • Parent: 5.1.22 Structures — declaration, accessing members (. and - - ) (Hinglish)

Case Map

object

address

array element

inner struct

field is a pointer

What do I hold right now

use dot

use arrow

re-ask at each hop

index first then dot

arrow once then dot

dot then arrow

pointer walk uses arrow

function edits caller via arrow

check not null before travel