Διαφορά μεταξύ δομής και ένωσης στο C
Τι είναι η Δομή;
Η δομή είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη στη γλώσσα προγραμματισμού C που συνδυάζει λογικά σχετικά στοιχεία δεδομένων διαφορετικών τύπων δεδομένων μαζί.
Όλα τα στοιχεία της δομής αποθηκεύονται σε συνεχόμενες θέσεις μνήμης. Η μεταβλητή τύπου δομής μπορεί να αποθηκεύσει περισσότερα από ένα στοιχεία δεδομένων διαφορετικών τύπων δεδομένων κάτω από ένα όνομα.
Τι είναι η Ένωση
Το Union είναι ένας τύπος δεδομένων που ορίζεται από τον χρήστη, όπως ακριβώς και μια δομή. Η Union συνδυάζει αντικείμενα διαφορετικών τύπων και μεγεθών μαζί. Η μεταβλητή union εκχωρεί το χώρο μνήμης ίσο με τον χώρο για να κρατήσει τη μεγαλύτερη μεταβλητή ένωσης. Επιτρέπει σε διάφορους τύπους αντικειμένων να μοιράζονται την ίδια τοποθεσία.
Σύνταξη Δομής Δήλωσης
struct [name of the structure] { type member1; type member2; type member3; };
Η δομή δηλώνεται χρησιμοποιώντας τη λέξη-κλειδί «struct» και το όνομα της δομής. Ο αριθμός 1, ο αριθμός 2, ο αριθμός 3 είναι μεμονωμένα μέλη της δομής. Το μέρος του σώματος τερματίζεται με ερωτηματικό (;).
Παράδειγμα Δομής στον Προγραμματισμό Γ
#include <stdio.h> struct student { char name[60]; int roll_no; float marks; } sdt; int main() { printf("Enter the following information:\n"); printf("Enter student name: "); fgets(sdt.name, sizeof(sdt.name), stdin); printf("Enter student roll number: "); scanf("%d", & sdt. roll_no); printf("Enter students marks: "); scanf("%f", & sdt.marks); printf("The information you have entered is: \n"); printf("Student name: "); printf("%s", sdt.name); printf("Student roll number: %d\n", sdt. roll_no); printf("Student marks: %.1f\n", sdt.marks); return 0; }
Στο παραπάνω πρόγραμμα δημιουργείται μια δομή που ονομάζεται student. Αυτή η δομή έχει τρία μέλη δεδομένων: 1) όνομα (string), 2) roll_no (ακέραιος) και 3) σημάδια (float).
Μετά από αυτό, δημιουργείται μια μεταβλητή δομής sdt για την αποθήκευση πληροφοριών μαθητή και την εμφάνιση τους στην οθόνη του υπολογιστή.
Παραγωγή:
Εισαγάγετε τις ακόλουθες πληροφορίες:
Εισαγάγετε το όνομα του μαθητή: James
Εισαγάγετε τον αριθμό καταλόγου μαθητών: 21
Εισαγάγετε βαθμούς μαθητή: 67
Οι πληροφορίες που έχετε εισάγει είναι:
Όνομα μαθητή: Γιάννης
Αριθμός καταλόγου μαθητών: 21
Βαθμοί μαθητή: 67.0
Σύνταξη Διακήρυξης Ένωσης
union [name of union] { type member1; type member2; type member3; };
Η Ένωση δηλώνεται χρησιμοποιώντας τη λέξη-κλειδί «union» και το όνομα της ένωσης. Ο αριθμός 1, ο αριθμός 2, ο αριθμός 3 είναι μεμονωμένα μέλη της ένωσης. Το μέρος του σώματος τερματίζεται με ερωτηματικό (;).
Παράδειγμα Union in C Programming
#include <stdio.h> union item { int x; float y; char ch; }; int main( ) { union item it; it.x = 12; it.y = 20.2; it.ch = 'a'; printf("%d\n", it.x); printf("%f\n", it.y); printf("%c\n", it.ch); return 0; }
Παραγωγή:
1101109601
20.199892
a
Στο παραπάνω πρόγραμμα, μπορείτε να δείτε ότι οι τιμές των x και y αλλοιώνονται. Μόνο η μεταβλητή ch εκτυπώνει το αναμενόμενο αποτέλεσμα. Αυτό συμβαίνει επειδή, σε ένωση, η θέση μνήμης είναι κοινή μεταξύ όλων των τύπων δεδομένων μελών.
Επομένως, το μόνο μέλος δεδομένων του οποίου η τιμή είναι αποθηκευμένη αυτήν τη στιγμή, θα καταλάβει χώρο στη μνήμη. Η τιμή της μεταβλητής ch αποθηκεύτηκε επιτέλους, άρα η τιμή του υπόλοιπου the μεταβλητές χάθηκε.
Δομή Vs. Ενωση
Εδώ είναι η σημαντική διαφορά μεταξύ δομής και ένωσης:
Structure | Ένωση |
---|---|
Μπορείτε να χρησιμοποιήσετε μια λέξη-κλειδί struct για να ορίσετε μια δομή. | Μπορείτε να χρησιμοποιήσετε μια λέξη-κλειδί ένωσης για να ορίσετε μια ένωση. |
Σε κάθε μέλος εντός της δομής εκχωρείται μια μοναδική θέση μνήμης. | Στην ένωση, μια θέση μνήμης μοιράζεται όλα τα μέλη δεδομένων. |
Η αλλαγή της τιμής ενός μέλους δεδομένων δεν θα επηρεάσει άλλα μέλη δεδομένων στη δομή. | Η αλλαγή της τιμής ενός μέλους δεδομένων θα αλλάξει την τιμή των άλλων μελών δεδομένων στην ένωση. |
Σας δίνει τη δυνατότητα να αρχικοποιήσετε πολλά μέλη ταυτόχρονα. | Σας δίνει τη δυνατότητα να αρχικοποιήσετε μόνο το πρώτο μέλος της ένωσης. |
Το συνολικό μέγεθος της δομής είναι το άθροισμα του μεγέθους κάθε μέλους δεδομένων. | Το συνολικό μέγεθος της ένωσης είναι το μέγεθος του μεγαλύτερου μέλους δεδομένων. |
Χρησιμοποιείται κυρίως για την αποθήκευση διαφόρων τύπων δεδομένων. | Χρησιμοποιείται κυρίως για την αποθήκευση ενός από τους πολλούς τύπους δεδομένων που είναι διαθέσιμοι. |
Καταλαμβάνει χώρο για κάθε μέλος γραμμένο σε εσωτερικές παραμέτρους. | Καταλαμβάνει χώρο για ένα μέλος που έχει το μεγαλύτερο μέγεθος γραμμένο σε εσωτερικές παραμέτρους. |
Μπορείτε να ανακτήσετε οποιοδήποτε μέλος κάθε φορά. | Μπορείτε να έχετε πρόσβαση σε ένα μέλος κάθε φορά στην ένωση. |
Υποστηρίζει ευέλικτη συστοιχία. | Δεν υποστηρίζει ευέλικτο πίνακα. |
Πλεονεκτήματα της δομής
Ακολουθούν τα πλεονεκτήματα/πλεονεκτήματα για τη χρήση της δομής:
- Οι δομές συγκεντρώνουν περισσότερα από ένα κομμάτια δεδομένων για το ίδιο θέμα μαζί στον ίδιο χώρο.
- Είναι χρήσιμο όταν θέλετε να συγκεντρώσετε δεδομένα παρόμοιων τύπων δεδομένων και παραμέτρων όπως το όνομα, το επίθετο κ.λπ.
- Είναι πολύ εύκολο να διατηρηθεί καθώς μπορούμε να αναπαραστήσουμε ολόκληρο το αρχείο χρησιμοποιώντας ένα μόνο όνομα.
- Στη δομή, μπορούμε να περάσουμε ένα πλήρες σύνολο εγγραφών σε οποιαδήποτε συνάρτηση χρησιμοποιώντας μία μόνο παράμετρο.
- Μπορείτε να χρησιμοποιήσετε μια σειρά δομών για να αποθηκεύσετε περισσότερες εγγραφές με παρόμοιους τύπους.
Πλεονεκτήματα της ένωσης
Ακολουθούν τα πλεονεκτήματα/πλεονεκτήματα για τη χρήση της ένωσης:
- Καταλαμβάνει λιγότερη μνήμη σε σύγκριση με τη δομή.
- Όταν χρησιμοποιείτε την ένωση, μόνο η τελευταία μεταβλητή είναι προσβάσιμη απευθείας.
- Η Ένωση χρησιμοποιείται όταν πρέπει να χρησιμοποιήσετε την ίδια θέση μνήμης για δύο ή περισσότερα μέλη δεδομένων.
- Σας δίνει τη δυνατότητα να διατηρείτε δεδομένα μόνο ενός μέλους δεδομένων.
- Ο εκχωρημένος χώρος του είναι ίσος με το μέγιστο μέγεθος του μέλους δεδομένων.
Μειονεκτήματα της δομής
Ακολουθούν τα μειονεκτήματα/μειονεκτήματα για τη χρήση της δομής:
- Εάν η πολυπλοκότητα του έργου πληροφορικής υπερβαίνει το όριο, η διαχείρισή του γίνεται δύσκολη.
- Η αλλαγή μιας δομής δεδομένων σε έναν κώδικα απαιτεί αλλαγές σε πολλά άλλα σημεία. Επομένως, οι αλλαγές γίνονται δύσκολο να εντοπιστούν.
- Η δομή είναι πιο αργή επειδή απαιτεί χώρο αποθήκευσης για όλα τα δεδομένα.
- Μπορείτε να ανακτήσετε οποιοδήποτε μέλος κάθε φορά στη δομή, ενώ μπορείτε να αποκτήσετε πρόσβαση σε ένα μέλος κάθε φορά στην ένωση.
- Η δομή καταλαμβάνει χώρο για κάθε μέλος γραμμένο σε εσωτερικές παραμέτρους ενώ η ένωση καταλαμβάνει χώρο για ένα μέλος που έχει το υψηλότερο μέγεθος γραμμένο σε εσωτερικές παραμέτρους.
- Η δομή υποστηρίζει ευέλικτη διάταξη. Η Ένωση δεν υποστηρίζει ευέλικτη συστοιχία.
Μειονεκτήματα της ένωσης
Ακολουθούν τα μειονεκτήματα/μειονεκτήματα για τη χρήση της ένωσης:
- Μπορείτε να χρησιμοποιήσετε μόνο ένα μέλος του σωματείου κάθε φορά.
- Όλες οι μεταβλητές ένωσης δεν μπορούν να αρχικοποιηθούν ή να χρησιμοποιηθούν με διαφορετικές τιμές κάθε φορά.
- Η Ένωση εκχωρεί έναν κοινό αποθηκευτικό χώρο για όλα τα μέλη της.
ΒΑΣΙΚΕΣ ΔΙΑΦΟΡΕΣ:
- Σε κάθε μέλος εντός της δομής εκχωρείται μια μοναδική θέση μνήμης ενώ σε ένωση μια θέση μνήμης μοιράζεται όλα τα μέλη δεδομένων.
- Η αλλαγή της τιμής ενός μέλους δεδομένων δεν θα επηρεάσει άλλα μέλη δεδομένων στη δομή, ενώ η αλλαγή της τιμής ενός μέλους δεδομένων θα αλλάξει την τιμή άλλων μελών δεδομένων σε ένωση.
- Η δομή χρησιμοποιείται κυρίως για την αποθήκευση διαφόρων τύπων δεδομένων, ενώ η ένωση χρησιμοποιείται κυρίως για την αποθήκευση ενός από τους πολλούς τύπους δεδομένων.
- Στη δομή, μπορείτε να ανακτήσετε οποιοδήποτε μέλος κάθε φορά, από την άλλη πλευρά στην ένωση, μπορείτε να έχετε πρόσβαση σε ένα μέλος τη φορά.
- Η δομή υποστηρίζει ευέλικτη διάταξη ενώ η ένωση δεν υποστηρίζει ευέλικτη διάταξη.
Δείτε επίσης το μάθημα C για αρχάριους:- Click Here