🟡 Intermediate  ·  Lesson 28

Unions और Enumerations

दो उपयोगी उपकरण: union और enum

यह lesson दो छोटे पर उपयोगी C features बताता है: union, जो कई members को एक memory space साझा करने देता है, और enum, जो numbers को पढ़ने योग्य नाम देता है। दोनों काम करते देखते ही सरल लगते हैं।

Union क्या है?

Union structure जैसा दिखता है, पर एक बड़े अंतर के साथ: इसके सभी members वही memory साझा करते हैं। एक समय में केवल एक member के पास असली value होती है — एक में लिखना दूसरों को मिटा देता है।

C Language
#include <stdio.h>
union Value {
    int i;
    float f;
};
int main() {
    union Value v;
    v.i = 10;
    printf("i = %d\n", v.i);
    v.f = 3.14;              // wahi memory overwrite karta hai
    printf("f = %.2f\n", v.f);
    return 0;
}
Output:
i = 10
f = 3.14

Union memory कैसे साझा करता है

चूँकि members overlap करते हैं, union केवल अपने सबसे बड़े member जितना बड़ा होता है — योग जितना नहीं।

C Language
union Value { int i; double d; char c; };
printf("%lu\n", sizeof(union Value));   // sabse bade (double) ka size
Output:
8

Union 8 bytes लेता है — double का size — भले उसके तीन members हों, क्योंकि सभी एक ही जगह रहते हैं।

Unions कब उपयोगी हैं

  • ऐसी value रखना जो कई types में से एक हो सकती है, पर एक समय में एक।
  • तंग, embedded या low-level programs में memory बचाना।
  • वही bytes दो तरह से समझना (advanced, low-level उपयोग)।
💡 एक पंक्ति में struct बनाम union

Structure अपने सभी members एक साथ रखता है; union एक समय में एक। पूरी तुलना के लिए देखें C में structure vs union

Enumerations (enum)

enum संबंधित integer constants की सूची को नाम देता है, तो आपका code numbers के बजाय शब्दों जैसा पढ़ा जाता है।

C Language
#include <stdio.h>
enum Day { MON, TUE, WED, THU, FRI };   // 0,1,2,3,4
int main() {
    enum Day today = WED;
    printf("Day number: %d\n", today);   // 2
    if (today == WED) printf("Midweek!\n");
    return 0;
}
Output:
Day number: 2
Midweek!

Default रूप से पहला नाम 0 है और हर अगला एक ज़्यादा। आप values स्पष्ट रूप से भी दे सकते हैं: enum Status { OK = 1, FAIL = 5 };

enum सादे numbers से बेहतर क्यों

enum के बिनाenum के साथ
if (state == 2)if (state == PAUSED)
2 का क्या मतलब?सादी अंग्रेज़ी जैसा पढ़ा जाता है
Numbers मिलाना आसानCompiler values देता है

आम गलतियाँ

  • Union का वह member पढ़ना जो आपने आख़िरी में नहीं लिखा — garbage मिलता है।
  • Union से सभी members एक साथ रखने की उम्मीद करना (वह structure है)।
  • यह मानना कि enum values हमेशा 1 से शुरू होती हैं — वे default रूप से 0 से शुरू होती हैं।
  • यह भूलना कि enum दरअसल भीतर बस एक int है।
🏋️ अभ्यास

एक union बनाएँ जो या तो int या char रखे, और उसका sizeof print करें। फिर enum Color { RED, GREEN, BLUE } define करें और GREEN का number print करें।

सारांश

  • Union के members एक memory space साझा करते हैं; एक समय में एक valid होता है।
  • Union का size उसके सबसे बड़े member जितना होता है।
  • Unions तब इस्तेमाल करें जब value कई types में से एक हो, एक समय में एक।
  • enum integer constants को पढ़ने योग्य नाम देता है, 0 से शुरू।
  • enum code को सादे numbers से साफ़ बनाता है; पूरे struct/union तुलना के लिए structure vs union देखें।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C में union क्या है?
Union एक user-defined type है जिसके सभी members एक ही memory block साझा करते हैं, तो किसी भी क्षण केवल एक member के पास valid value होती है। इसका size उसके सबसे बड़े member जितना होता है। Unions तब उपयोगी हैं जब कोई value कई types में से एक हो सकती हो पर एक समय में सिर्फ़ एक।
Union और structure में क्या अंतर है?
Structure में हर member की अपनी अलग memory होती है, तो सभी members एक साथ values रख सकते हैं और size सभी का योग होता है। Union में सभी members एक साझा जगह में overlap करते हैं, तो एक समय में एक valid होता है और size सबसे बड़े member जितना। पूरी तुलना के लिए structure vs union lesson देखें।
C में enum क्या है?
enum (enumeration) एक type है जो integer constants के समूह को अनुकूल नाम देता है, जैसे enum Day { MON, TUE, WED };। Default रूप से नाम 0 से शुरू होकर एक-एक बढ़ते हैं, तो MON 0 है, TUE 1, और ऐसे ही, जो code को सादे numbers से कहीं ज़्यादा पढ़ने योग्य बनाता है।
Numbers के बजाय enum क्यों इस्तेमाल करें?
Enum code को स्वयं-व्याख्यात्मक बनाता है: if (day == SUNDAY) लिखना if (day == 0) से कहीं स्पष्ट है। यह संबंधित constants को एक type के अंतर्गत समूहित करता है और compiler को values देने देता है, गलतियाँ कम करते और बाद में बदलना आसान बनाते हुए।
Union कितनी memory इस्तेमाल करता है?
Union केवल अपने सबसे बड़े member जितनी memory इस्तेमाल करता है, क्योंकि सभी members एक ही जगह साझा करते हैं। जैसे एक int और double वाला union double जितनी जगह लेता है, क्योंकि दोनों में वही बड़ा है।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.