Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में यूनियन टू पॉइंटर (Union to Pointer)


यूनियन (Union) क्या है?

यूनियन एक यूजर-डिफाइंड डेटा प्रकार है जो एक ही मेमोरी स्थान को विभिन्न डेटा प्रकारों के सदस्यों के लिए साझा करने की अनुमति देता है। किसी भी समय केवल एक सदस्य ही मान रख सकता है।

यूनियन की घोषणा

union यूनियन_नाम {
    डेटा_प्रकार सदस्य1;
    डेटा_प्रकार सदस्य2;
    // ...
};

उदाहरण:
union Sample {
    int a;
    float b;
    char c;
};

आकार (Size)

यूनियन का आकार उसके सबसे बड़े सदस्य के आकार के बराबर होता है (पैडिंग सहित)।


union Sample { int a; float b; char c; };
// मान लें: int=4, float=4, char=1
// आकार = max(4,4,1) = 4 बाइट्स (या अलाइनमेंट के अनुसार 8/12)

यूनियन पॉइंटर (Union Pointer)

यूनियन चर का पता रखने वाला पॉइंटर। सदस्य एक्सेस के लिए -> (ऐरो ऑपरेटर) उपयोग करें।

सिंटैक्स


union Sample var;
union Sample *ptr = &var;

// एक्सेस
ptr->a = 10;
ptr->b = 3.14;

उदाहरण प्रोग्राम

#include <stdio.h>

union abc {
    int a;
    char b;
};

int main() {
    union abc var;
    var.a = 90;           // 90 = 0x0000005A (little-endian: 5A 00 00 00)
    
    union abc *p = &var;
    
    // p->a और p->b समान मेमोरी साझा करते हैं
    printf("p->a = %d\n", p->a);   // 90
    printf("p->b = %c\n", p->b);   // 'Z' (ASCII 90)
    printf("पता: %p\n", (void*)p);
    
    // दूसरा सदस्य बदलने पर पहला प्रभावित होता है
    p->b = 'A';  // 65
    printf("p->b बदलने के बाद p->a = %d\n", p->a);  // 65
    
    return 0;
}

आउटपुट

p->a = 90
p->b = Z
पता: 0x7ffee3b8c9ac
p->b बदलने के बाद p->a = 65

यूनियन vs संरचना (Struct)

विशेषताStructUnion
मेमोरीसभी सदस्यों का योग (+पैडिंग)सबसे बड़ा सदस्य
सक्रिय सदस्यसभी एक साथएक समय में एक
उपयोगसंबंधित डेटा समूहमेमोरी बचाना, प्रकार-पनिंग
प्रारंभिकरणसभी सदस्यकेवल पहला सदस्य (C99: डेजिग्नेटेड)

व्यावहारिक उपयोग: प्रकार-पनिंग (Type Punning)


union FloatInt {
    float f;
    int i;
};

void printFloatBits(float x) {
    union FloatInt u;
    u.f = x;
    printf("फ्लोट: %f, बिट्स: 0x%08X\n", u.f, u.i);
}

सावधानियाँ

  • एक सदस्य लिखकर दूसरे को पढ़ना इम्प्लीमेंटेशन-डिफाइंड व्यवहार है (आमतौर पर काम करता है लेकिन पोर्टेबल नहीं)।
  • C11 से _Alignas और stdalign.h अलाइनमेंट नियंत्रण के लिए।
  • एनोनिमस यूनियन (C11) संरचना के अंदर सीधे सदस्य एक्सेस देते हैं।
  1. C भाषा में कैरेक्टर ऑपरेशन्स को समझें C भाषा में कैरेक्टर ऑपरेशन्स को समझें

    C प्रोग्रामिंग भाषा में कैरेक्टर (A-Z या a-z), अंक (0-9), व्हाइट स्पेस, या विशेष प्रतीक हो सकते हैं। घोषणा (Declaration) C प्रोग्रामिंग में कैरेक्टर ऑपरेशन्स के लिए घोषणा निम्नलिखित है: char a = A; // कैरेक्टर कॉन्स्टेंट का उपयोग करके कैरेक्टर इनपुट/आउटपुट फंक्शन्स कैरेक्टर इनपुट/आउटपुट फंक्शन्स

  1. C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें

    पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल का पता स्टोर करता है। विशेषताएं पॉइंटर मेमोरी स्पेस बचाता है। सीधे मेमोरी लोकेशन एक्सेस के कारण पॉइंटर का एक्जीक्यूशन टाइम तेज होता है। पॉइंटर्स की मदद से, मेमोरी को कुशलता से एक्सेस किया जाता है, यानी मेमोरी को डायनामिकली एलोकेट और डीएलोकेट किया जाता है। पॉइ

  1. C भाषा में पॉइंटर एक्सेस करने की अवधारणा C भाषा में पॉइंटर एक्सेस करने की अवधारणा

    पॉइंटर घोषणा, प्रारंभिकरण और एक्सेस 1. सामान्य चर int qty = 179; // मेमोरी में: पता 1000 पर मान 179 संग्रहीत 2. पॉइंटर घोषणा int *p; // p एक पॉइंटर चर है जो int का पता रख सकता है 3. पॉइंटर प्रारंभिकरण int qty = 175; int *p; p = &qty; // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें मेमोरी आर