Βασική διαφορά – Structure vs Union στο C
Ένας πίνακας είναι ένα δομημένο δεδομένα που υποστηρίζεται από γλώσσα C. Ένας πίνακας μπορεί να χρησιμοποιηθεί για την αποθήκευση στοιχείων δεδομένων του ίδιου τύπου. Εάν υπάρχει μια δήλωση ως σημάδια int [10]. τότε τα σημάδια είναι ένας πίνακας που μπορεί να αποθηκεύσει δέκα σημάδια και όλα είναι ακέραιοι. Μερικές φορές απαιτείται αποθήκευση στοιχείων δεδομένων διαφορετικών τύπων στην ίδια θέση μνήμης. Για παράδειγμα, ένας υπάλληλος μπορεί να έχει ταυτότητα υπαλλήλου, όνομα, τμήμα, ηλικία κ.λπ. Είναι διαφορετικών τύπων δεδομένων. Επομένως, είναι απαραίτητο να υπάρχει μια μέθοδος αποθήκευσης διαφόρων στοιχείων δεδομένων ως ενιαία μονάδα. Οι δομές και οι ενώσεις στο C χρησιμοποιούνται για την αποθήκευση στοιχείων δεδομένων διαφορετικών τύπων στην ίδια θέση μνήμης. Μια δομή και μια ένωση είναι παρόμοια, αλλά διαφοροποιούνται κυρίως λόγω της εκχώρησης μνήμης. Η μνήμη που απαιτείται για την αποθήκευση μιας μεταβλητής δομής είναι το άθροισμα του μεγέθους της μνήμης όλων των μελών. Η μνήμη που απαιτείται για την αποθήκευση μιας μεταβλητής ένωσης είναι η μνήμη που απαιτείται για το μεγαλύτερο στοιχείο της ένωσης. Αυτή είναι η βασική διαφορά μεταξύ δομής και ένωσης στο C. Αυτό το άρθρο εξετάζει τη διαφορά μεταξύ δομής και ένωσης στο C.
Τι είναι η δομή στη C;
Μια δομή είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη σε C. Βοηθά στο συνδυασμό στοιχείων δεδομένων διαφορετικών τύπων. Μια δομή μπορεί να αναπαριστά εγγραφές. Ένας μαθητής μπορεί να έχει student_id, student_name κ.λπ. Αντί να αποθηκεύει κάθε μεταβλητή ξεχωριστά, όλα αυτά τα διαφορετικά στοιχεία δεδομένων μπορούν να συμπυκνωθούν σε μια ενιαία μονάδα χρησιμοποιώντας μια δομή. Ορίζεται χρησιμοποιώντας τη λέξη-κλειδί «struct». Σε μια δομή, όλα τα μέλη της είναι προσβάσιμα ανά πάσα στιγμή. Τα παρακάτω δημιουργούν μια δομή προκύπτοντος τύπου δεδομένων Student.
struct Μαθητής {
intstudent_id;
char student_name[20];
};
Για την παραπάνω δομή, οι μεταβλητές μπορούν να δηλωθούν ως εξής.
struct Student student1, student2, student3;
Υπάρχουν δύο μέθοδοι πρόσβασης στα μέλη της δομής. Δηλαδή χρησιμοποιώντας τον τελεστή μέλους (.) και τον τελεστή δείκτη δομής (->). Η πρόσβαση στα μέλη είναι δυνατή χρησιμοποιώντας τη δομή_variable_name. όνομα μέλους. Εάν ο προγραμματιστής θέλει να αποκτήσει πρόσβαση στο όνομα του μαθητή 2, τότε μπορεί να γράψει τη δήλωση ως printf(student2.student_name);
Αναφέρετε το παρακάτω πρόγραμμα με μια δομή.
Εικόνα 01: Πρόγραμμα C με δομές
Σύμφωνα με το παραπάνω πρόγραμμα, ο Φοιτητής είναι μια δομή. Περιέχει student_id και student_name. Δύο μεταβλητές τύπου δομής δηλώνονται στο κύριο πρόγραμμα. Ονομάζονται student1 και student2. Το αναγνωριστικό του student1 εκχωρείται με την τιμή 1 χρησιμοποιώντας τον τελεστή μέλους ως student1.student_id=1. Το όνομα "Ann" είναι μια χορδή. Επομένως, αντιγράφεται στο μέλος student_name χρησιμοποιώντας τη συνάρτηση αντιγραφής συμβολοσειράς strcpy. Το αναγνωριστικό και το όνομα εκχωρούνται στο student2 με παρόμοιο τρόπο. Τέλος, αυτές οι τιμές εκτυπώνονται χρησιμοποιώντας τον τελεστή μέλους.
Η ποσότητα μνήμης που απαιτείται για την αποθήκευση μιας μεταβλητής δομής είναι το άθροισμα του μεγέθους της μνήμης όλων των μελών. Το student_id περιέχει 4 byte και το student_name περιέχει 20 byte (ένα byte το καθένα για έναν χαρακτήρα). Τα συνολικά 24 byte είναι το άθροισμα του μεγέθους της μνήμης που απαιτείται από τη δομή.
Τι είναι η Ένωση στο C;
Η ένωση είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη στο C. Βοηθά στην αποθήκευση διαφορετικών τύπων δεδομένων στην ίδια θέση μνήμης. Ένα Βιβλίο μπορεί να έχει ιδιότητες όπως όνομα_βιβλίου, τιμή κ.λπ. Αντί να δημιουργηθούν μεταβλητές για καθεμία από αυτές, μπορεί να χρησιμοποιηθεί μια ένωση για τη συμπύκνωση όλων των διαφορετικών τύπων δεδομένων σε μια μονάδα χρησιμοποιώντας μια ένωση. Ορίζεται χρησιμοποιώντας τη λέξη-κλειδί "ένωση". Τα παρακάτω δημιουργούν ένα Βιβλίο ένωσης δεδομένων που προκύπτει.
unionBook{
όνομα χαρακτήρων[20];
διπλή τιμή;
};
Για την παραπάνω ένωση, οι μεταβλητές μπορούν να δηλωθούν ως εξής.
union Βιβλίο βιβλίο1, βιβλίο2;
Υπάρχουν δύο μέθοδοι πρόσβασης στα μέλη της ένωσης. Δηλαδή χρησιμοποιώντας τον τελεστή μέλους (.) και τον τελεστή δείκτη δομής (->). Η πρόσβαση στα μέλη είναι δυνατή χρησιμοποιώντας το union_variable_name. όνομα μέλους. Εάν ο προγραμματιστής θέλει να αποκτήσει πρόσβαση στο όνομα του βιβλίου1, τότε μπορεί να γράψει τη δήλωση ως printf(book1.name);
Αναφέρετε το παρακάτω πρόγραμμα με μια ένωση.
Εικόνα 02: Πρόγραμμα C που χρησιμοποιεί ένωση
Σύμφωνα με το παραπάνω πρόγραμμα, το Βιβλίο είναι μια ένωση. Το βιβλίο1 είναι μια μεταβλητή τύπου union. Το όνομα και η τιμή έχουν εκχωρηθεί τιμές. Στην ένωση, μόνο ένα από τα μέλη του μπορεί να έχει πρόσβαση κάθε φορά και όλα τα άλλα μέλη θα έχουν τιμές σκουπιδιών. Η τιμή του αναγνωριστικού δεν εκτυπώνεται σωστά, αλλά η τιμή της τιμής εκτυπώνεται σωστά.
Εικόνα 03: Τροποποιημένο πρόγραμμα C με ένωση
Σύμφωνα με το παραπάνω πρόγραμμα, το Book είναι σωματείο. Το βιβλίο1 και το βιβλίο2 είναι μεταβλητές τύπου ένωσης. Αρχικά, εκχωρείται η τιμή για το όνομα βιβλίου1 και εκτυπώνεται. Στη συνέχεια εκχωρείται η τιμή για το όνομα βιβλίου2 και εκτυπώνεται. Όλα τα μέλη εκτυπώνουν σωστά επειδή χρησιμοποιείται ένα μέλος κάθε φορά. Η μνήμη που απαιτείται για την αποθήκευση μιας ένωσης είναι η μνήμη που απαιτείται για το μεγαλύτερο στοιχείο της ένωσης. Στο παραπάνω πρόγραμμα, η μεταβλητή ονόματος είναι 20 byte. Είναι μεγαλύτερο από την τιμή. Έτσι, η εκχώρηση μνήμης για την ένωση είναι 20 byte.
Ποιες είναι οι ομοιότητες μεταξύ δομής και ένωσης στο C;
- Τόσο το Structure όσο και το Union στο C είναι τύποι δεδομένων που καθορίζονται από το χρήστη.
- Τόσο η δομή όσο και η ένωση στο C μπορούν να χρησιμοποιηθούν για την αποθήκευση διαφορετικών τύπων δεδομένων στην ίδια θέση μνήμης.
Ποια είναι η διαφορά μεταξύ δομής και ένωσης στο C;
Structure vs Union στο C |
|
Η δομή είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη στη γλώσσα C που επιτρέπει τον συνδυασμό δεδομένων διαφορετικών τύπων μαζί. | Το Union είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη στη γλώσσα C που επιτρέπει τον συνδυασμό δεδομένων διαφορετικών τύπων μαζί. |
Προσβασιμότητα | |
Σε μια δομή, όλα τα μέλη της είναι προσβάσιμα ανά πάσα στιγμή. | Σε μια ένωση, μόνο ένα από τα μέλη της μπορεί να έχει πρόσβαση κάθε φορά και όλα τα άλλα μέλη θα περιέχουν τιμές σκουπιδιών. |
Κατανομή μνήμης | |
Η μνήμη που απαιτείται για την αποθήκευση μιας μεταβλητής δομής είναι το άθροισμα του μεγέθους της μνήμης όλων των μελών. | Η μνήμη που απαιτείται για την αποθήκευση μιας μεταβλητής ένωσης είναι η μνήμη που απαιτείται για το μεγαλύτερο στοιχείο της ένωσης. |
Λέξη-κλειδί | |
Η λέξη-κλειδί που χρησιμοποιείται για τον ορισμό μιας δομής είναι "struct". | Η λέξη-κλειδί που χρησιμοποιείται για τον ορισμό μιας ένωσης είναι "ένωση". |
Σύνοψη – Structure vs Union στο C
Χρησιμοποιείται ένας πίνακας για την αποθήκευση των στοιχείων δεδομένων του ίδιου τύπου. Μερικές φορές είναι απαραίτητο να αποθηκεύονται στοιχεία δεδομένων διαφορετικών τύπων στην ίδια θέση μνήμης. Η γλώσσα προγραμματισμού C παρέχει δομή και ένωση για την ολοκλήρωση αυτής της εργασίας. Και οι δύο είναι τύποι δεδομένων που καθορίζονται από τον χρήστη. Η μνήμη που απαιτείται για την αποθήκευση μιας μεταβλητής δομής είναι το άθροισμα του μεγέθους της μνήμης όλων των μελών. Η μνήμη που απαιτείται για την αποθήκευση μιας μεταβλητής ένωσης είναι η μνήμη που απαιτείται για το μεγαλύτερο στοιχείο της ένωσης. Αυτή είναι η διαφορά μεταξύ δομής και ένωσης στο C.