Τύποι δομημένων δεδομένων σε C - Struct και Typedef που εξηγούνται με παραδείγματα

Κατά τη διάρκεια της εμπειρίας προγραμματισμού μπορεί να αισθανθείτε την ανάγκη να ορίσετε τον δικό σας τύπο δεδομένων. Στο Γ αυτό γίνεται χρησιμοποιώντας δύο λέξεις-κλειδιά: structκαι typedef. Οι δομές και τα συνδικάτα θα σας δώσουν την ευκαιρία να αποθηκεύσετε μη ομοιογενείς τύπους δεδομένων σε μία μόνο συλλογή.

Δήλωση νέου τύπου δεδομένων

typedef struct student_structure{ char* name; char* surname; int year_of_birth; }student;

Μετά από αυτόν τον μικρό κωδικό studentθα είναι μια νέα δεσμευμένη λέξη-κλειδί και θα μπορείτε να δημιουργήσετε μεταβλητές τύπου student. Λάβετε υπόψη ότι αυτό το νέο είδος μεταβλητής πρόκειται να δομηθεί, πράγμα που σημαίνει ότι ορίζει μια φυσικώς ομαδοποιημένη λίστα μεταβλητών που θα τοποθετηθεί κάτω από ένα όνομα σε ένα μπλοκ μνήμης.

Νέα χρήση τύπου δεδομένων

Ας δημιουργήσουμε τώρα μια νέα studentμεταβλητή και αρχικοποιούμε τα χαρακτηριστικά της:

 student stu; strcpy( stu.name, "John"); strcpy( stu.surname, "Snow"); stu.year_of_birth = 1990; printf( "Student name : %s\n", stu.name); printf( "Student surname : %s\n", stu.surname); printf( "Student year of birth : %d\n", stu.year_of_birth);

Όπως μπορείτε να δείτε σε αυτό το παράδειγμα, πρέπει να αντιστοιχίσετε μια τιμή σε όλες τις μεταβλητές που περιέχονται στον νέο τύπο δεδομένων σας. Για να αποκτήσετε πρόσβαση σε μια μεταβλητή δομής μπορείτε να χρησιμοποιήσετε το σημείο όπως στο stu.name. Υπάρχει επίσης ένας πιο σύντομος τρόπος για να αντιστοιχίσετε τιμές σε μια δομή:

typedef struct{ int x; int y; }point; point image_dimension = {640,480};

Εναλλακτικά, εάν προτιμάτε να ορίσετε τις τιμές ακολουθώντας μια διαφορετική σειρά:

point img_dim = { .y = 480, .x = 640 };

Συνδικάτα εναντίον δομών

Τα συνδικάτα δηλώνονται στο ίδιο ήταν ως δομές, αλλά είναι διαφορετικά επειδή μόνο ένα στοιχείο εντός της ένωσης μπορεί να χρησιμοποιηθεί ανά πάσα στιγμή.

typedef union{ int circle; int triangle; int ovel; }shape;

Θα πρέπει να χρησιμοποιήσετε unionσε τέτοια περίπτωση όπου θα εφαρμόζεται μόνο μία συνθήκη και θα χρησιμοποιείται μόνο μία μεταβλητή. Μην ξεχνάτε ότι μπορούμε να χρησιμοποιήσουμε και τον ολοκαίνουργιο τύπο δεδομένων μας:

typedef struct{ char* model; int year; }car_type; typedef struct{ char* owner; int weight; }truck_type; typedef union{ car_type car; truck_type truck; }vehicle;

Λίγα ακόμη κόλπα

  • Όταν δημιουργείτε ένα δείκτη σε μια δομή χρησιμοποιώντας τον &τελεστή, μπορείτε να χρησιμοποιήσετε τον ειδικό ->χειριστή infix για να τον αναθέσετε. Αυτό χρησιμοποιείται πολύ για παράδειγμα όταν εργάζεστε με συνδεδεμένες λίστες στο Γ
  • Ο νέος καθορισμένος τύπος μπορεί να χρησιμοποιηθεί όπως και άλλοι βασικοί τύποι για σχεδόν τα πάντα. Δοκιμάστε, για παράδειγμα, να δημιουργήσετε έναν πίνακα τύπου studentκαι να δείτε πώς λειτουργεί.
  • Οι δομές μπορούν να αντιγραφούν ή να αντιστοιχιστούν αλλά δεν μπορείτε να τις συγκρίνετε!

Περισσότερες πληροφορίες:

  • Εγχειρίδιο του C Beginner: Μάθετε τα βασικά της γλώσσας προγραμματισμού C σε λίγες μόνο ώρες
  • Τύποι δεδομένων σε C - Ακέραιος, Κυμαινόμενο Σημείο και Άκυρο
  • malloc in C: Επεξήγηση δυναμικής κατανομής μνήμης στο C