स्ट्रक्चर बनाम यूनियन: तुलनात्मक तालिका
| क्रमांक | स्ट्रक्चर | यूनियन |
|---|---|---|
| 1 | परिभाषा: भिन्न डेटा आइटम्स का समूह जो एक नाम के तहत समूहीकृत होता है। | परिभाषा: एक मेमोरी लोकेशन जिसे विभिन्न डेटा टाइप्स के वेरिएबल्स शेयर करते हैं। |
| 2 | सिंटैक्स: struct tagname { datatype member1; ... }; | सिंटैक्स: union tagname { datatype member1; ... }; |
| 3 | उदाहरण: struct sample { int a; float b; char c; }; | उदाहरण: union sample { int a; float b; char c; }; |
| 4 | कीवर्ड: struct | कीवर्ड: union |
| 5 | मेमोरी आवंटन: सभी मेंबर्स के आकार का योग (उदा: 7 बाइट्स) | मेमोरी आवंटन: सबसे बड़े मेंबर का आकार (उदा: 4 बाइट्स) |
| 6 | प्रत्येक मेंबर के लिए अलग मेमोरी | एक समय में केवल एक मेंबर मेमोरी में रहता है |
| 7 | सभी मेंबर्स एक साथ एक्सेसिबल | केवल एक मेंबर एक समय में वैध |
मेमोरी लेआउट चित्रण
(चित्र: स्ट्रक्चर में प्रत्येक मेंबर के लिए अलग-अलग मेमोरी ब्लॉक; यूनियन में ओवरलैपिंग मेमोरी ब्लॉक)
प्रोग्राम उदाहरण: आकार की तुलना
स्ट्रक्चर
#include <stdio.h>
struct size {
double a; // 8 bytes
int b; // 4 bytes
char c; // 1 byte
float d; // 4 bytes
};
int main() {
printf("%zu", sizeof(struct size)); // पैडिंग के कारण 24 bytes
return 0;
}
आउटपुट: 24
यूनियन
#include <stdio.h>
union size {
double a; // 8 bytes
int b; // 4 bytes
char c; // 1 byte
float d; // 4 bytes
};
int main() {
printf("%zu", sizeof(union size)); // सबसे बड़ा = 8 bytes
return 0;
}
आउटपुट: 8
कब क्या उपयोग करें?
- स्ट्रक्चर: जब सभी मेंबर्स को एक साथ स्टोर और एक्सेस करना हो।
- यूनियन: जब एक समय में केवल एक मेंबर उपयोग हो, मेमोरी बचाना हो, या टाइप-पनिंग करना हो।