Union in C Programming with Example (पूरी जानकारी हिंदी में)

Hello दोस्तों! C Programming के इस नये Post में आपका स्वागत है।आज हम C language का एक बहुत ही दिलचस्प और memory-efficient (मेमोरी बचाने वाला) Topic Cover करेंगे, जिसका नाम है Union

क्या आपने कभी सोचा है कि अगर आपके पास Memory कम हो, लेकिन आपको अलग-अलग तरह का Data (जैसे int, float, char) Store करना हो, तो आप क्या करेंगे? क्या हर Variable के लिए अलग memory लेना ज़रूरी है?

यहीं काम आता है Union। इस पोस्ट में हम Union in C Programming with Example के साथ विस्तार से समझेंगे। हम देखेंगे कि यह Structure से कैसे अलग है और कैसे यह Memory को share (साझा) करके उसे बचाता है। अगर आप memory management में मास्टर बनना चाहते हैं, तो यह Topic आपके लिए बहुत ज़रूरी है।

तो चलिए, आज का Lesson शुरू करते हैं!

What is Union in C? (Union क्या है)

सरल शब्दों में कहें तो, Union एक User-Defined Data Type है, बिल्कुल Structure (struct) की तरह। इसका काम भी अलग-अलग Data Types को एक ग्रुप (समूह) में रखना है।

लेकिन, Union और Structure में एक सबसे बड़ा अंतर है: Structure में हर Member को अपनी अलग Memory मिलती है, जबकि Union में सभी Members एक ही Memory Location (Same Memory Address) को साझा (Share) करते हैं।

इसका मतलब यह है कि Union के अंदर आप एक समय पर सिर्फ एक ही Member में Value Store कर सकते हैं।

Real-life Analogy (उदाहरण): मान लीजिए आपके घर में एक “Study Table” है।

  • सुबह आप उसे पढ़ाई के लिए इस्तेमाल करते हैं।
  • दोपहर में आपका भाई उस पर लैपटॉप चलाता है।
  • रात में आपके पापा उस पर ऑफिस का काम करते हैं।

टेबल एक ही है (Common Memory), लेकिन उसे इस्तेमाल करने वाले लोग अलग-अलग हैं और अलग समय पर आते हैं। अगर पापा टेबल इस्तेमाल कर रहे हैं, तो आप वहां पढ़ाई नहीं कर सकते। Union बिल्कुल इसी Concept पर काम करता है—“One Space, Many Users” (एक जगह, कई User)।

C Language में Union Declaration

Union को बनाने (Declare करने) का तरीका बिल्कुल Structure जैसा ही है, बस struct की जगह हम union Keyword का इस्तेमाल करते हैं।

Syntax (लिखने का तरीका):

union UnionName {
    data_type member1;
    data_type member2;
    // और भी members हो सकते हैं
};

Line-By-Line Explanation:

  • union: यह एक खास शब्द (Keyword) है जो Compiler को बताता है कि हम एक Union बना रहे हैं।
  • UnionName: यह हमारे Union का नाम है (जैसे: Data, Student, आदि)।
  • { }: इन ब्रैकेट के अंदर हम उन Members को लिखते हैं जिन्हें हमें ग्रुप करना है।
  • ; अंत में सेमीकोलन लगाना बहुत ज़रूरी है, नहीं तो Error आएगा।

Union Variable बनाने के तरीके

Union का इस्तेमाल करने के लिए हमें उसका Variable बनाना पड़ता है। इसके दो मुख्य तरीके हैं:

तरीका 1: Union बनाने के साथ ही Variable बनाना

union Data {
    int i;
    char c;
} d1, d2; // d1 और d2 Variables बनाये गए

तरीका 2: main() Function के अंदर Variable बनाना (सबसे ज़्यादा इस्तेमाल होने वाला तरीका)

union Data {
    int i;
    char c;
};

int main() {
    union Data d1; // यहाँ d1 वेरिएबल बनाया गया
    return 0;
}

C Language में Union का Basic Example

चलिए एक छोटा सा Program बनाते हैं ताकि आपको इसे Practical तरीके से समझने में आसानी हो। ध्यान से देखिएगा कि इसका Output कैसे आता है:

#include <stdio.h>
#include <string.h>

// Union define कर रहे हैं
union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data d; // Union variable बनाया

    // Integer value set की
    d.i = 10;
    printf("data.i : %d\n", d.i);

    // Float value set की (पुरानी int value overwrite हो जाएगी)
    d.f = 220.5;
    printf("data.f : %f\n", d.f);

    // String value copy की (पुरानी float value overwrite हो जाएगी)
    strcpy(d.str, "C Programming");
    printf("data.str : %s\n", d.str);

    return 0;
}

Output:

data.i : 10

data.f : 220.500000

data.str : C Programming

Step-by-Step Explanation:

  1. सबसे पहले: हमने d.i में 10 Store किया। Computer की Memory में 10 Save हो गया और हमने उसे Print किया तो Output बिल्कुल सही आया।
  2. फिर: हमने d.f में 220.5 Store किया। क्योंकि Union में Memory वही पुरानी वाली इस्तेमाल होती है, इसलिए पहले वाला ’10’ वहाँ से हट गया और उसकी जगह पर 220.5 आ गया।
  3. आखिर में: हमने d.str में एक String (जैसे कोई नाम) डाला। अब क्या हुआ? पुराना वाला फ्लोट (float) Data भी वहाँ से मिट गया और अब उस जगह पर String Save हो गई।

 ध्यान देने वाली बात: हमें हर बार सही Output इसलिए मिला क्योंकि हमने एक के बाद एक (one by one) Value का इस्तेमाल किया। अगर हम तीनों को एक साथ Access करने की कोशिश करते है, तो Data “Corrupt” (गड़बड़) हो जाता है।

Initializing Union Members In C

Beginners अक्सर यहाँ गलती करते हैं। हम Union के सारे Members को एक साथ Initialize नहीं कर सकते क्योंकि उन सबके लिए मेमोरी एक ही है।

सही तरीका (Valid): सिर्फ पहले मेंबर को Initialize करें:

union Data d = {100}; // यह सही है, इससे int i = 100 store हो जाएगा

गलत तरीका (Invalid):

union Data d = {100, 3.14, “Hello”}; // Error! आप एक साथ सबको Value नहीं दे सकते

अगर आपको किसी खास Member (जैसे float) को सेट करना है, तो Designated Initializer (C99 स्टैंडर्ड) का इस्तेमाल करें:

union Data d = {.f = 3.14}; // यह बिल्कुल सही तरीका है

Accessing Union Members In C

Union के Members को Access करने का तरीका बिल्कुल Structure जैसा ही है। इसके लिए हम (.) Dot Operator इस्तेमाल करते हैं:

  • Dot Operator (.) : जब हम एक साधारण (Normal) Variable का इस्तेमाल कर रहे हों।
  • Arrow Operator (->) : जब हम Pointer Variable के ज़रिए Members तक पहुँचना चाहते हों।

Beginners द्वारा की जाने वाली ‘Logical Mistake’:

अक्सर Beginners यह गलती करते हैं कि वे एक Member में Value डालते हैं और दूसरे को Print कराने की कोशिश करते हैं। ऐसे में Garbage Value (गलत मान) Print होगी।

उदाहरण:

d.i = 10;

printf(“%f”, d.f); // यहाँ गलत रिज़ल्ट आएगा!

ऐसा क्यों होता है? इसका कारण यह है कि Memory में तो Integer का Binary Data (0s और 1s) Store है, लेकिन हम Computer को उसे Float की तरह पढ़ने के लिए कह रहे हैं। चूंकि दोनों का Data Store करने का तरीका अलग है, इसलिए Output गलत आता है।

How Union Stores Data (Memory Concept)

इस Point को बहुत ध्यान से समझना, क्योंकि यही Union का सबसे मुख्य हिस्सा (Core Concept) है।

Structure और Union में Memory Location का तरीका बिल्कुल अलग होता है:

  • Structure में Size सभी Members के जोड़ (Sum) के बराबर होता है।
  • लेकिन Union का Size उतना ही होता है जितना उसके “सबसे बड़े मेंबर” (Largest Member) का Size होता है।

हमारे उदाहरण के हिसाब से समझते हैं:

  • int i लेता है: 4 bytes
  • float f लेता है: 4 bytes
  • char str[20] लेता है: 20 bytes

तो यहाँ पूरे Union Data का कुल Size 20 Bytes होगा। ये 20 बाइट्स ही i, f, और str तीनों आपस में साझा (Share) करेंगे। सबसे मज़ेदार बात यह है कि इन सभी का Starting Address (शुरुआती पता) बिल्कुल एक ही होगा।

union in c programming with example

Size of Union in C (Union का Size)

Exam और Interview में यह सवाल बहुत पूछा जाता है। आइए इसे sizeof Operator के साथ साबित करते हैं:

#include <stdio.h>
union Test {
    int x;      // 4 bytes
    char y[10]; // 10 bytes
    double z;   // 8 bytes
};

int main() {
    union Test t;
    printf("Size of Union is: %lu bytes", sizeof(t));
    return 0;
}

Output: Size of Union is: 16 bytes

वैसे तो यहाँ सबसे बड़ा Member 10 bytes का है (char y[10]), लेकिन Computer Memory को तेज़ी से एक्सेस (Fast Access) करने के लिए ‘Alignment’ का इस्तेमाल करता है (अक्सर यह 4 या 8 के गुणांक में होता है)। इसीलिए हमारे Compiler के हिसाब से इसका Size 12 या 16 bytes दिखाई दे सकता है।

Difference Between Union and Structure (Hindi)

यह टेबल आपकी जानकारी के लिए बहोत महत्वपूर्ण है, जिसमे Union और Structure का Difference बताया गया है।

Structure vs Union: मुख्य अंतर

विशेषता (Feature)Structure यूनियन (Union)
कीवर्ड (Keyword)struct का उपयोग होता है।union का उपयोग होता है।
Memory Locationहर Member को अलग-अलग Memory मिलती है।सभी Members एक ही Common memory शेयर करते हैं।
कुल साइज (Total Size)सभी Members के Size का जोड़ (Sum)।सबसे बड़े Member का Size।
Value Accessएक साथ सभी Members की Value Access कर सकते हैं।एक समय पर सिर्फ एक ही Member की Value सही से Access कर सकते हैं।
बदलाव (Modification)एक Member को बदलने से दूसरे पर कोई असर नहीं पड़ता।एक Member बदलने से दूसरे का Data Overwrite या Corrupt हो जाता है।

Advantages of Union in C

इसे और भी आसान शब्दों में इस प्रकार समझ सकते हैं:

1. Memory की बचत (Memory Saving): Union का सबसे बड़ा फायदा यही है। यह उन Devices के लिए बहुत उपयोगी है जिनमें RAM कम होती है, जैसे कि Embedded Systems (जैसे माइक्रोवेव, स्मार्ट वॉच आदि)। चूँकि यह सभी Members के लिए एक ही जगह इस्तेमाल करता है, इसलिए फालतू Memory बर्बाद नहीं होती।

2. Data को बेहतर तरीके से संभालना (Efficient Data Handling): जब हमें पहले से पता हो कि आने वाला Data कई विकल्पों में से सिर्फ एक ही टाइप का Data होगा, तब Union सबसे अच्छा विकल्प है।

  • उदाहरण के तौर पर: मान लीजिए किसी परीक्षा का Result दिखाना है। रिजल्ट या तो Pass (1 या 0 – int) होगा या फिर Fail (एक लेटर ग्रेड – char)। चूँकि एक छात्र एक समय पर या तो पास होगा या फेल, इसलिए दोनों के लिए अलग-अलग Memory लेने के बजाय एक ही जगह (Union) का इस्तेमाल करना समझदारी है।

Disadvantages of Union in C

  1. 1. डेटा ओवरराइटिंग (Data Overwriting): Union में सबसे बड़ी चुनौती यह है कि जैसे ही हम किसी नए मेंबर को वैल्यू देते हैं, पुराना डेटा तुरंत मिट जाता है। चूँकि जगह एक ही है, इसलिए नया Data पुराने Data को Overwrite कर देता है।
  2. 2. डिबगिंग में मुश्किल (Debugging Difficulty): Union के साथ काम करते समय Code की गलतियाँ (Bugs) ढूँढना थोड़ा कठिन होता है। कभी-कभी हमें यह पता नहीं चल पाता कि उस समय Memory के अंदर कौन सा Data सक्रिय (Active) है। अगर हम गलती से दूसरे Type का Data पढ़ने की कोशिश करेंगे, तो Program गलत नतीजे देने लगेगा और यह समझना मुश्किल हो जाता है, कि खराबी कहाँ है।

Uses of Union in C

Union का इस्तेमाल आजकल मोबाइल ऐप्स या वेबसाइट बनाने में (High-level apps) भले ही कम होता हो, लेकिन Low-level programming (सिस्टम के करीब वाली Coding) में यह आज भी “बादशाह” है।

यहाँ इसके कुछ प्रमुख उपयोग दिए गए हैं:

  • डिवाइस ड्राइवर्स (Device Drivers): जब Computer को किसी Hardware (जैसे प्रिंटर या कीबोर्ड) से बात करनी होती है, तो Data को खास तरह से पढ़ना पड़ता है। Union इसमें Hardware Registers को कुशलता से Access करने में मदद करता है।
  • कर्नेल प्रोग्रामिंग (Kernel Programming): Operating System (जैसे Windows या Linux) के सबसे अंदरूनी हिस्से (Kernel) को बनाते समय Memory बचाना बहुत ज़रूरी होता है। वहां Union Memory Management का सबसे बेहतरीन औज़ार है।
  • नेटवर्क प्रोटोकॉल (Network Protocols): जब इंटरनेट पर Data एक पैकेट के रूप में आता है, तो एक ही पैकेट में अलग-अलग तरह की जानकारी छिपी हो सकती है। Union का उपयोग करके हम उस एक ही Data पैकेट को अलग-अलग नज़रिए से (जैसे Header या Payload) देख और समझ सकता है।

Quizzes

Union in C Quiz

Q1. Union बनाने (Declare करने) के लिए सही keyword कौन सा है?

A) uni  
B) union  
C) structure  
D) define
Answer: B Reason: C language में Union define करने के लिए union keyword का उपयोग किया जाता है।

Q2. Union का size किसके बराबर होता है?

A) सभी members का total size  
B) सबसे छोटे member का size  
C) सबसे बड़े member का size  
D) Random size
Answer: C Reason: Union का memory size उसके सबसे बड़े member के size के बराबर होता है।

Q3. Union में एक समय पर कितने members active रह सकते हैं?

A) सभी  
B) दो  
C) सिर्फ एक  
D) कोई नहीं
Answer: C Reason: Union में सभी members एक ही memory location share करते हैं, इसलिए एक समय पर सिर्फ एक member ही active हो सकता है।

Q4. Union के members को access करने के लिए कौन सा operator उपयोग होता है?

A) Dot (.)  
B) Comma (,)  
C) Colon (:)  
D) Hash (#)
Answer: A Reason: Union और Structure दोनों में members access करने के लिए dot (.) operator का उपयोग किया जाता है।

Q5. Union का मुख्य उद्देश्य (Purpose) क्या है?

A) Code fast करना  
B) Memory बचाना  
C) Graphics बनाना  
D) Loop चलाना
Answer: B Reason: Union का मुख्य उद्देश्य memory optimization करना होता है क्योंकि सभी members एक ही memory share करते हैं।

FAQs – Union in C Programming

Q1. क्या हम Union के अंदर Structure इस्तेमाल कर सकते हैं?

Ans: जी हाँ, बिल्कुल! हम Union के अंदर Structure और Structure के अंदर Union (Nested) इस्तेमाल कर सकते हैं।

यह Complex Data Structures बनाने में बहुत काम आता है।

Q2. Union और Structure में कौन सा बेहतर है?

Ans: दोनों अपनी जगह सही हैं।

अगर हमें सारा data एक साथ store करना है (जैसे Employee Record), तो Structure का उपयोग करें।

अगर data के multiple options हैं (जैसे input या तो int होगा या float), तो Union सबसे बेहतर है।

Q3. क्या हम Union के सभी Members को एक साथ print कर सकते हैं?

Ans: नहीं।

Union में एक समय पर सिर्फ वही member सही value दिखाता है जिसे सबसे अंत में value दी गई हो।

बाकी members garbage value (गलत data) दिखाते हैं।

Q4. sizeof ऑपरेटर Padding क्यों जोड़ता है?

Ans: CPU की efficiency बढ़ाने के लिए padding जोड़ी जाती है।

Processor data को तेज़ी से access करता है जब वह proper alignment (जैसे 4, 8, 16 bytes) में store हो।

इसीलिए compiler थोड़ी extra memory (padding) add करता है।

Q5. क्या Function Union को return कर सकता है?

Ans: हाँ।

C language में functions Union को return भी कर सकते हैं और argument (input) के रूप में accept भी कर सकते हैं।

Conclusion (निष्कर्ष)

तो दोस्तों, आज आपने सीखा कि Union in C Programming क्या है, और भी union से सम्बंधित सभी topics को सीखा हमने देखा example code के साथ। बस एक बात याद रखना: “Union मतलब Sharing” (एक मेमोरी, कई रूप)।

उम्मीद है आपको यह टॉपिक अब पूरी तरह समझ आ गया होगा। इस उदाहरण वाले Code को अपने लैपटॉप पर रन करके ज़रूर देखें। अगर कोई भी शक (doubt) हो, तो कमेंट करके पूछें।

अगर यह पोस्ट मददगार लगी हो, तो अपने दोस्तों के साथ इसे शेयर करें और उनकी भी मदद करें। 

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top