🏗️
Structures & Unions

Structures — Basics

Custom Data Types
💡 Struct ek ID card jaisa hai jisme alag-alag types ki jaankari ek saath rehti hai — naam (string), age (int), height (float) — sab ek hi card (struct) mein, ek variable ki tarah treat hota hai.

Array sirf ek hi type ke elements rakh sakta hai (jaise sirf ints ya sirf strings). Struct multiple, DIFFERENT types ko ek saath group karne deta hai — jaise ek "Student" mein naam (char array), roll number (int), aur marks (float) ek saath.

struct keyword se define karte hain, phir uske members ko dot (.) operator se access karte hain. Ek struct ka naam define karke tum us type ke jitne chaho utne variables bana sakte ho — jaise int ke multiple variables banate ho.

struct Student {
  char name[50];
  int rollNumber;
  float marks;
};

int main() {
  struct Student s1;
  strcpy(s1.name, "Aarav");
  s1.rollNumber = 101;
  s1.marks = 92.5;

  printf("%s scored %.1f\n", s1.name, s1.marks);
  return 0;
}
🏗️
Struct ek ID card jaisa hai jisme alag-alag types ki jaankari ek saath rehti hai — naam (string), age (int), height (float) — sab ek hi card (struct) mein, ek variable ki tarah treat hota hai.
1 / 5
⚡ Quick Recap
  • struct = multiple alag types ek saath group karna
  • . (dot) operator se members access karo
  • Ek struct type ke multiple variables bana sakte ho
Is page mein (2 subtopics)

Struct ka array banana bahut common hai — jaise 30 students ka data store karna. Har array element ek poora struct hai, apne saare members ke saath.

struct Student {
  char name[30];
  int marks;
};

int main() {
  struct Student class[3] = {
    {"Aarav", 85},
    {"Riya", 92},
    {"Zoya", 78}
  };

  for (int i = 0; i < 3; i++) {
    printf("%s: %d\n", class[i].name, class[i].marks);
  }
  return 0;
}
💡Tip: Array of structs aur array of pointers-to-structs mein farq hai — pehla case mein poora struct data array mein hai (contiguous memory), doosre mein sirf addresses hain jo kahi aur allocated memory point karte hain.

sizeof(struct) hamesha members ke individual sizes ka simple sum nahi hota — compiler alignment ke liye "padding" (khaali bytes) add kar sakta hai, taaki har member ek efficient memory boundary par ho. Ye ek common interview surprise hai.

struct Example {
  char c;    // 1 byte
  int i;     // 4 bytes
};

printf("%lu\n", sizeof(struct Example));
// 8 expected nahi hai (1+4=5), aksar 8 milta hai — 3 bytes padding
// taaki 'i' ek 4-byte-aligned address par shuru ho
💡Tip: Members ko size ke hisaab se (bade se chhote) order karne se padding kam ho sakta hai — struct ka total size chhota ho jaata hai. Memory-critical systems (embedded) mein ye matter karta hai.