C भाषा में यूनियन Unions in C

 

C भाषा में यूनियन क्या है What is Unions 


यूनियन एक डेटा स्ट्रक्चर होता है जो एक ही मेमोरी स्थान का उपयोग करता है लेकिन इसमें अनेक डेटा टाइप हो सकते हैं। एक समझौता है कि, जब हम एक समय में केवल एक उपयोग करने वाले अलग-अलग डेटा टाइप को इस्तेमाल करना चाहते हैं तो उनियन का उपयोग किया जाता है।

यूनियन को इसलिए समझना आसान होता है क्योंकि इसे संशोधित नहीं किया जा सकता है, और इसका सामान्य उपयोग डेटा की विविधता के साथ मेमोरी संचय करना होता है।

यूनियन निम्नलिखित रूपों में डिफ़ाइन किया जा सकता है:

union name_of_union
{
    data_type1 member1;
    data_type2 member2;
    data_type3 member3;
    .
    .
} variable_name;

यहाँ, name_of_union नाम उनियन के लिए है, member1, member2, member3, आदि उसके सदस्य होते हैं, और data_type1, data_type2, data_type3, आदि वे उसके सदस्यों के डेटा टाइप होते हैं। वे अलग-अलग हो सकते हैं। इसके बाद, variable_name उस यूनियन के एक स्वचालित चयनित सदस्य के लिए एक वेरिएबल होता है जो यूनियन के लिए बनाया गया होता है।

Union को Define करना

C भाषा में Union डेटा टाइप, डेटा को संग्रहीत करने के लिए उपयोग किया जाता है। यह एक संयुक्त डेटा टाइप है जो एक से अधिक डेटा टाइप के वेरिएबल्स को एक ही मेमोरी स्पेस में संग्रहित करता है।

Union को निम्नलिखित संगठन वाली संरचना द्वारा परिभाषित किया जा सकता है:

union union_name {
    data_type_1 member_1;
    data_type_2 member_2;
    .
    .
    .
    data_type_n member_n;
};

यहां, union_name नाम उस Union के लिए होता है जिसे आप परिभाषित कर रहे हैं। data_type_1, data_type_2, और data_type_n वेरिएबल के डेटा टाइप हैं, जो union के सदस्य होंगे। member_1, member_2, और member_n सदस्य वेरिएबल हैं जो union के सदस्य होंगे और ये सभी सदस्य वेरिएबल एक ही मेमोरी स्पेस में संग्रहित होंगे। Union के सदस्य वेरिएबल को एक ही स्थान पर संग्रहित किया जाता है ताकि संपूर्ण Union का साइज केवल सबसे बड़े सदस्य के साइज से ही निर्धारित होता है।

उदाहरण के लिए, यदि आप एक Union बनाते हैं जो दो सदस्य वेरिएबल्स, एक int वेरिएबल और एक float वेरिएबल, को संग्रहीत करता है, तो उस Union को निम्न रूप में परिभाषित करते है 

फिर आप उस Union का उपयोग करते हुए इन दोनों सदस्य वेरिएबल में से किसी एक को अपनी आवश्यकतानुसार उपयोग कर सकते हैं।

यहां एक उदाहरण दिया गया है जो दो सदस्य वेरिएबल्स को संग्रहीत करने के लिए Union का उपयोग करता है:

#include <stdio.h>

union sampleUnion {
    int x;
    float y;
};

int main() {
    union sampleUnion u;
    u.x = 10;
    printf("Value of x: %d\n", u.x);
    u.y = 2.5;
    printf("Value of y: %f\n", u.y);
    printf("Value of x: %d\n", u.x);
    return 0;
}

इस उदाहरण में, एक Union 'sampleUnion' को परिभाषित किया गया है जो एक int वेरिएबल 'x' और एक float वेरिएबल 'y' को संग्रहीत करता है। main() फ़ंक्शन में, एक Union वेरिएबल 'u' बनाया जाता है और उसे 10 के समान अनुमति दी जाती है। उसके बाद, 'y' को 2.5 के समान अनुमति दी जाती है। आप देख सकते हैं कि जब 'y' को अनुमति दी जाती है तो 'x' का मान भी बदल जाता है। इसका कारण यह है कि 'x' और 'y' दोनों सदस्य वेरिएबल होते हैं जो Union के साथ एक ही मेमोरी स्पेस में संग्रहीत होते हैं।

इस तरह, Union बहुत उपयोगी होते हैं जब आपको विभिन्न डेटा टाइप के वेरिएबल्स आपको एक ही मेमोरी स्पेस में वेरिएबल्स को संग्रहीत करना होता है। Union का उपयोग करने से, आप बहुत कम मेमोरी स्पेस का उपयोग करते हुए विभिन्न डेटा टाइप्स के वेरिएबल्स को संग्रहीत कर सकते हैं।

आशा है कि यह आपके लिए Union के बारे में एक सरल समझ और उसका उपयोग करने के बारे में एक अच्छा ज्ञान प्रदान करता है।

Union के Members को Accessing करना

C भाषा में Union के सदस्यों को एक वेबल के रूप में उपयोग किया जा सकता है। Union के सदस्यों को एक्सेस करने के लिए डॉट (.) या एरो (->) ऑपरेटर का उपयोग किया जाता है।

जब Union के सदस्यों को डॉट (.) ऑपरेटर के द्वारा एक्सेस किया जाता है, तब यह सदस्य वेरिएबल Union वेरिएबल के साथ सीधे अपनी मूल स्थिति में संबद्ध हो जाता है। जब Union के सदस्यों को एरो (->) ऑपरेटर के द्वारा एक्सेस किया जाता है, तब Union वेरिएबल पर पहले एरो (->) ऑपरेटर के द्वारा एक्सेस किया जाता है, और फिर उसके सदस्य वेरिएबल को दूसरे एरो (->) ऑपरेटर के द्वारा एक्सेस किया जाता है।

यहां एक उदाहरण दिया गया है जो Union के सदस्यों को एक्सेस करने को दर्शाता है:

#include <stdio.h>

union sampleUnion {
    int x;
    float y;
};

int main() {
    union sampleUnion u;
    u.x = 10;
    printf("Value of x: %d\n", u.x);
    u.y = 2.5;
    printf("Value of y: %f\n", u.y);
    printf("Value of x: %d\n", u.x);

    // Accessing union members using dot (.) operator
    u.x = 20;
    printf("Value of x: %d\n", u.x);
    u.y = 5.5;
    printf("Value of y: %f\n", u.y);
    printf("Value of x: %d\n", u.x);

    // Accessing union members using arrow (->) operator
    union sampleUnion *pu;
    pu = &u;
    pu->x = 30;
    printf("Value of x: %d\n", pu->x);

Union का उदाहरण

C भाषा में Union एक डेटा टाइप है जो अनेक डेटा टाइप्स के वेरिएबल्स को संग्रहीत करने की अनुमति देता है। Union में सभी सदस्य एक ही मेमोरी स्पेस का उपयोग करते हैं, और संग्रहीत किए गए वेरिएबल्स में से केवल एक ही सदस्य एक्टिव हो सकता है।

यहां एक उदाहरण दिया गया है जो Union का उपयोग करता है:

#include <stdio.h>

union sampleUnion {
    int x;
    float y;
};

int main() {
    union sampleUnion u;
    u.x = 10;
    printf("Value of x: %d\n", u.x);
    u.y = 2.5;
    printf("Value of y: %f\n", u.y);
    printf("Value of x: %d\n", u.x);
    return 0;
}

यहां, एक Union वेरिएबल sampleUnion बनाया गया है, जिसमें दो सदस्य हैं - x और y। यहां, x और y दोनों को एक ही मेमोरी स्पेस में संग्रहीत किया जाता है।

उदाहरण के शुरूआत में, u.x को 10 के साथ इनिशियलाइज़ किया गया है। उसके बाद, printf फंक्शन का उपयोग करके x और y के मानों को प्रिंट किया जाता है। नोट करें कि x और y के मान एक ही स्थान पर संग्रहीत होते हैं, इसलिए y के मान को इनिशियलाइज़ करने के बाद x का मान 2.5 के बजाय 0 हो गया है।

Union में define, access का उदाहरण

यदि हम Union में define और access की बात करें, तो उसके लिए हमें Union टाइप का एक वेरिएबल बनाना होगा, उसे इनिशियलाइज़ करना होगा और उसके सदस्यों तक पहुँच हासिल करना होगा। निम्नलिखित उदाहरण में, हम Union में संग्रहित वेरिएबल के लिए मैं दो प्रकार के Union वेरिएबल बनाते हैं - संख्या वर्ग (numeric) और अक्षर वर्ग (char):

#include <stdio.h>

union numericUnion {
    int a;
    float b;
    double c;
};

union charUnion {
    char name[20];
    char sex;
};

int main() {
    union numericUnion numVar;
    union charUnion charVar;

    numVar.a = 10;
    printf("The value of numVar.a is: %d\n", numVar.a);

    numVar.b = 3.14;
    printf("The value of numVar.b is: %f\n", numVar.b);

    charVar.sex = 'M';
    printf("The sex is: %c\n", charVar.sex);

    strcpy(charVar.name, "John");
    printf("The name is: %s\n", charVar.name);

    return 0;
}


इस उदाहरण में, हम Union टाइप numericUnion और charUnion को define करते हैं जिसमें हम न्यूमेरिक डेटा टाइप (int, float, double) और चार डेटा टाइप (char, char array) को संग्रहित कर सकते हैं।

उदाहरण के अंत में, हम numVar और charVar Union वेरिएबल्स को इनिशियलाइज़ करते हैं। numVar.a में 10 को इनिशियलाइज़ किया जाता है और उसको प्रिंट करते हैं। उसके बाद, numVar.b को 3.14 के साथ इनिशियलाइज़ किया जाता है और उसे प्रिंट किया जाता है

आउटपुट

The value of numVar.a is: 10
The value of numVar.b is: 3.140000
The sex is: M
The name is: John