Διαφορά μεταξύ δομής και Ένωσης Διαφορά μεταξύ της
η δομή και η ένωση είναι καθορισμένοι από το χρήστη τύποι δεδομένων στη Γ γλώσσα και είναι εννοιολογικά οι ίδιοι, ωστόσο, εξακολουθούν να διαφέρουν με διάφορους τρόπους, όπως ο τρόπος μνήμης που κατανέμεται στα μέλη τους. Δηλώνονται ομοίως αλλά λειτουργούν διαφορετικά. Επιτρέπουν στον χρήστη να συνδυάζει διαφορετικούς τύπους δεδομένων με ένα μόνο όνομα. Ενώ χωριστή θέση μνήμης χρησιμοποιείται για κάθε μέλος όταν δηλώνει μεταβλητές δομής, τα διαφορετικά μέλη μιας μεταβλητής συνέντευξης μοιράζονται την ίδια θέση μνήμης. Ας μελετήσουμε τη διαφορά ανάμεσα στη δομή και την ένωση είναι λεπτομέρεια.
Τι είναι η Δομή;
Μια δομή είναι απλώς ένας άλλος τύπος δεδομένων που έχει οριστεί από τον χρήστη στο C που επιτρέπει στον χρήστη να συνδυάζει τύπους δεδομένων διαφορετικών ειδών σε έναν μόνο τύπο σε ένα μπλοκ μνήμης. Μια δομή μπορεί να περιέχει τόσο απλούς όσο και πολύπλοκους τύπους δεδομένων σχετικούς μεταξύ τους, οι οποίοι διαφορετικά δεν θα έχουν νόημα. Κάθε μέλος της δομής παίρνει τη δική του θέση μνήμης, ώστε να μπορεί να έχει πρόσβαση και να ανακτηθεί ανά πάσα στιγμή.
Μια δομή χρησιμοποιείται όταν πολλά δεδομένα χρειάζονται ομαδοποίηση σαν ένας κατάλογος ο οποίος αποθηκεύει πληροφορίες για πολλά μέλη σε ένα βιβλίο ή σε ένα βιβλίο διευθύνσεων που αποθηκεύει όλες τις πληροφορίες για ένα μόνο όνομα - διεύθυνση, τον αριθμό επικοινωνίας και ούτω καθεξής. Η διεύθυνση κάθε μέλους θα είναι σε αύξουσα σειρά, πράγμα που σημαίνει ότι η μνήμη κάθε μέλους θα αρχίσει με διαφορετικές τιμές αντιστάθμισης. Η μεταβολή της αξίας ενός μέλους δεν θα έχει καμία επίδραση στα άλλα μέλη.
Μια λέξη-κλειδί 'struct' χρησιμοποιείται για τον ορισμό μιας δομής διαφορετικών τύπων δεδομένων κάτω από ένα ενιαίο όνομα. Για παράδειγμα, εάν θέλετε να δημιουργήσετε μια βάση δεδομένων για τους υπαλλήλους, θα πρέπει να αποθηκεύσετε τα στοιχεία του υπαλλήλου, την ηλικία, το τηλέφωνο και το μισθό κάτω από μια ενιαία οντότητα. Αυτό γίνεται με τη λέξη-κλειδί 'struct', η οποία στη συνέχεια λέει στον μεταγλωττιστή ότι έχει δηλωθεί μια δομή.
struct υπάλληλος {
όνομα συμβολοσειράς;
ηλικία συμβολοσειρών.
τηλέφωνο κορδονιών?
μισθός συμβολοσειρών.
} emp1, emp2.
Εδώ, ο «υπάλληλος» είναι το όνομα της δομής και δημιουργούνται δύο μεταβλητές «emp1» και «emp2» του τύπου «υπάλληλος». Οι αγκύλες κλεισίματος πρέπει να ακολουθούνται από ένα ερωτηματικό (?).
Τα μέλη μιας δομής μπορούν να έχουν πρόσβαση σε δύο τύπους φορέων:
- Operator μέλος
- Operator pointer
Τι είναι η Union;
Είναι ένας ειδικός τύπος δεδομένων που χρησιμοποιείται στο C που επιτρέπει στο χρήστη να αποθηκεύει τύπους δεδομένων διαφορετικών ειδών στην ίδια θέση μνήμης. Μια ένωση είναι αρκετά παρόμοια με μια δομή και μπορεί να οριστεί αντικαθιστώντας τη λέξη κλειδί 'struct' με τη λέξη-κλειδί 'union'. Τα μέλη επικαλύπτουν τη μνήμη μεταξύ τους σε μια ένωση και είναι αρκετά μεγάλα για να χωρέσουν όλα τα μέλη της.
Όταν μια μεταβλητή συνδέεται με ένωση, ο μεταγλωττιστής κατανέμει τη μνήμη λαμβάνοντας υπόψη το μέγεθος της μεγαλύτερης μνήμης, έτσι ώστε το μέγεθος μιας ένωσης να είναι ίσο με το μέγεθος του μεγαλύτερου μέλους δεδομένων.Μια ένωση μπορεί να οριστεί με πολλά μέλη, αλλά μόνο ένα μέλος περιέχει την αξία σε οποιαδήποτε δεδομένη στιγμή του χρόνου.
Η διεύθυνση είναι ίδια για όλα τα μέλη μιας ένωσης, που σημαίνει ότι κάθε μέλος ξεκινά με την ίδια αξία αντιστάθμισης. Και η μεταβολή της αξίας ενός μέλους θα επηρεάσει τις αξίες άλλων μελών. Μια ένωση μπορεί να χρησιμοποιηθεί όταν θέλετε να αποθηκεύσετε κάτι που είναι ένας από τους διάφορους τύπους δεδομένων.
συνδικαλιστής υπάλληλος {
char name [32];
int age?
μισθός επί πληρωμή.
}.
Εδώ η λέξη «ένωση» ορίζει την ένωση που είναι αρκετά παρόμοια με τη δήλωση της δομής. Η μεταβλητή μπορεί είτε να αποθηκεύσει μια τιμή συμβολοσειράς που είναι «όνομα του υπαλλήλου», μια ακέραια τιμή η οποία είναι η «ηλικία του εργαζομένου», ή ένα float που αντιπροσωπεύει το «μισθό του εργαζομένου».
Διαφορά μεταξύ δομής και Ένωσης
1. Λέξη-κλειδί
Η λέξη-κλειδί 'struct' χρησιμοποιείται για τον ορισμό μιας δομής ενώ η λέξη-κλειδί 'union' χρησιμοποιείται για τον ορισμό μιας ένωσης.
2. Κατανομή μνήμης
Διαχωρίζεται χώρος μνήμης για τα μέλη μέσα σε μια δομή και τα μέλη έχουν διαφορετικές διευθύνσεις που δεν μοιράζονται μνήμη. Μια ένωση, από την άλλη πλευρά, μοιράζεται τον ίδιο χώρο μνήμης για όλα τα μέλη της, έτσι κατανέμεται η κοινή θέση μνήμης.
3. Πρόσβαση Μέλους
Μια ένωση αποθηκεύει μία μόνο τιμή κάθε φορά που όλα τα μέλη της καθιστούν την πρόσβαση σε ένα μόνο μέλος τη φορά. Αν και πολλές τιμές μπορούν να αποθηκευτούν σε μια δομή, έτσι ώστε οποιαδήποτε τιμή μέλους να μπορεί να προσπελαστεί και να ανακτηθεί ανά πάσα στιγμή.
4. Μέγεθος
Το μέγεθος μιας δομής είναι ίσο με το άθροισμα του μεγέθους όλων των μελών ή περισσότερο, ενώ το μέγεθος μιας ένωσης είναι ίσο με το μέγεθος του μεγαλύτερου μεγέθους μέλους.
5. Αρχικοποίηση
Σε μια δομή, πολλά μέλη μπορούν να αρχικοποιηθούν ταυτόχρονα, ενώ σε μια ένωση, μόνο το πρώτο μέλος μπορεί να αρχικοποιηθεί με την αξία του τύπου του.
5. Τιμή
Μια δομή μπορεί να αποθηκεύσει διαφορετικές τιμές όλων των μελών και η αλλαγή στην τιμή ενός μέλους δεν θα έχει καμία επίδραση στις τιμές των άλλων μελών. Ενώ μια ένωση αποθηκεύει την ίδια τιμή για όλα τα μέλη της και η αλλαγή αξίας ενός μέλους θα επηρεάσει την αξία άλλων.
Δομή vs. Ένωση
Δομή | Ένωση |
Η λέξη-κλειδί Struct χρησιμοποιείται για τον ορισμό δομής. | Η λέξη-κλειδί της Ένωσης χρησιμοποιείται για να ορίσει μια ένωση. |
Τα μέλη δεν μοιράζονται τη μνήμη σε μια δομή. | Τα μέλη μοιράζονται το χώρο μνήμης σε μια ένωση. |
Οποιοδήποτε μέλος μπορεί να ανακτηθεί ανά πάσα στιγμή σε μια δομή. | Μόνο ένα μέλος μπορεί να προσπελαστεί σε μια στιγμή σε ένωση. |
Αρκετά μέλη μιας δομής μπορούν να προετοιμαστούν ταυτόχρονα. | Μόνο το πρώτο μέλος μπορεί να αρχικοποιηθεί. |
Το μέγεθος της δομής είναι ίσο με το άθροισμα του μεγέθους του κάθε μέλους. | Το μέγεθος της ένωσης είναι ίσο με το μέγεθος του μεγαλύτερου μέλους. |
Η αλλαγή τιμής ενός μέλους δεν θα επηρεάσει την αξία άλλου μέλους. | Η αλλαγή της τιμής ενός μέλους επηρεάζει άλλες τιμές μελών. |
Αποθηκεύει διαφορετικές τιμές για όλα τα μέλη. | Αποθηκεύει την ίδια τιμή για όλα τα μέλη. |
Περίληψη
- Τόσο η δομή όσο και η ένωση είναι τύποι δεδομένων που έχουν οριστεί από τον χρήστη στο C και είναι λειτουργικά και εννοιολογικά τα ίδια, αλλά είναι αρκετά διαφορετικά με διάφορους τρόπους.
- Και οι δύο περιέχουν μεταβλητές διαφορετικών τύπων δεδομένων, αλλά χρησιμοποιούν την ίδια σύνταξη για τη δήλωση των μεταβλητών και την πρόσβαση στα μέλη. Ενώ μια δομή ορίζεται από τη λέξη-κλειδί 'struct', μια ένωση ορίζεται από τη λέξη-κλειδί 'union'.
- Κάθε μέλος αποκτά χωριστή θέση μνήμης σε μια δομή, ενώ σε μια ένωση, ο συνολικός χώρος μνήμης είναι ισοδύναμος με το μεγαλύτερο μέλος μεγέθους. Όλα τα μέλη μοιράζονται τον ίδιο χώρο μνήμης σε μια ένωση.
- Οποιοδήποτε μέλος σε οποιαδήποτε ακολουθία μπορεί να έχει πρόσβαση σε μια δομή, ενώ σε μια ένωση, μπορεί να προσεγγιστεί μόνο εκείνη η μεταβλητή της οποίας η αξία αποθηκεύτηκε πρόσφατα.