C δομή (δομές)

Σε αυτό το σεμινάριο, θα μάθετε για τους τύπους δομών στον προγραμματισμό C. Θα μάθετε να ορίζετε και να χρησιμοποιείτε δομές με τη βοήθεια παραδειγμάτων.

Στον προγραμματισμό C, ένα struct (ή δομή) είναι μια συλλογή μεταβλητών (μπορεί να είναι διαφορετικών τύπων) με ένα μόνο όνομα.

Πώς να ορίσετε δομές;

Για να μπορέσετε να δημιουργήσετε μεταβλητές δομής, πρέπει να ορίσετε τον τύπο δεδομένων. Για να ορίσετε μια δομή, χρησιμοποιείται η structλέξη-κλειδί.

Σύνταξη δομ

 δομή δομή Όνομα (μέλος DataType μέλος; μέλος τύπου Data2;…); 

Εδώ είναι ένα παράδειγμα:

 struct Person (όνομα char (50); int citNo; float gaji;); 

Εδώ struct Personορίζεται ένας παράγωγος τύπος . Τώρα, μπορείτε να δημιουργήσετε μεταβλητές αυτού του τύπου.

Δημιουργήστε μεταβλητές δομής

Όταν δηλώνεται ένας τύπος δομής, δεν εκχωρείται χώρος αποθήκευσης ή μνήμη. Για να εκχωρήσουμε τη μνήμη ενός δεδομένου τύπου δομής και να δουλέψουμε μαζί του, πρέπει να δημιουργήσουμε μεταβλητές.

Δείτε πώς δημιουργούμε μεταβλητές δομής:

struct Person (όνομα char (50); int citNo; float μισθό;); int main () (struct Person person1, person2, p (20); return 0;)

Ένας άλλος τρόπος δημιουργίας μιας μεταβλητής struct είναι:

 struct Person (όνομα char (50); int citNo; float gaji;) person1, person2, p (20); 

Και στις δύο περιπτώσεις, δημιουργούνται δύο μεταβλητές person1, person2, και array array p με 20 στοιχεία τύπου struct Person.

Πρόσβαση σε μέλη μιας δομής

Υπάρχουν δύο τύποι τελεστών που χρησιμοποιούνται για την πρόσβαση σε μέλη μιας δομής.

  1. . - Χειριστής μέλους
  2. -> - Τελεστής δείκτη δομής (θα συζητηθεί στο επόμενο σεμινάριο)

Ας υποθέσουμε ότι θέλετε να αποκτήσετε πρόσβαση στο μισθό του ατόμου2. Δείτε πώς μπορείτε να το κάνετε.

 πρόσωπο 2. μισθός

Παράδειγμα: Προσθέστε δύο αποστάσεις

 // Program to add two distances (feet-inch) #include struct Distance ( int feet; float inch; ) dist1, dist2, sum; int main() ( printf("1st distance"); printf("Enter feet: "); scanf("%d", &dist1.feet); printf("Enter inch: "); scanf("%f", &dist1.inch); printf("2nd distance"); printf("Enter feet: "); scanf("%d", &dist2.feet); printf("Enter inch: "); scanf("%f", &dist2.inch); // adding feet sum.feet = dist1.feet + dist2.feet; // adding inches sum.inch = dist1.inch + dist2.inch; // changing to feet if inch is greater than 12 while (sum.inch>= 12) ( ++sum.feet; sum.inch = sum.inch - 12; ) printf("Sum of distances = %d\'-%.1f "", sum.feet, sum.inch); return 0; )

Παραγωγή

 1η απόσταση Εισαγάγετε πόδια: 12 Εισάγετε ίντσα: 7,9 2η απόσταση Εισαγάγετε πόδια: 2 Εισάγετε ίντσα: 9,8 Άθροισμα αποστάσεων = 15'-5,7 "

Λέξη-κλειδί typedef

Χρησιμοποιούμε τη typedefλέξη-κλειδί για να δημιουργήσουμε ένα ψευδώνυμο για τύπους δεδομένων. Συνήθως χρησιμοποιείται με δομές για την απλοποίηση της σύνταξης δήλωσης μεταβλητών.

Αυτός ο κωδικός

struct Απόσταση (int πόδια, float inch;); int main () (δομή Απόσταση d1, d2;)

είναι ισοδύναμο με

typedef struct Απόσταση (int πόδια, float inch;) αποστάσεις; int main () (αποστάσεις d1, d2;)

Ένθετες Κατασκευές

Μπορείτε να δημιουργήσετε δομές μέσα σε μια δομή στον προγραμματισμό C. Για παράδειγμα,

δομικό συγκρότημα (int imag; float real;); struct αριθμός (struct complex comp; int ακέραιοι;) num1, num2;

Ας υποθέσουμε ότι θέλετε να ορίσετε το imag of num2 μεταβλητή σε 11. Δείτε πώς μπορείτε να το κάνετε:

 num2.comp.imag = 11; 

Γιατί δομές σε C;

Ας υποθέσουμε ότι θέλετε να αποθηκεύσετε πληροφορίες για ένα άτομο: το όνομά του, τον αριθμό υπηκοότητας και τον μισθό. Μπορείτε να δημιουργήσετε διαφορετικά ονόματα μεταβλητών, citNo και μισθό για να αποθηκεύσετε αυτές τις πληροφορίες.

Τι γίνεται αν πρέπει να αποθηκεύσετε πληροφορίες για περισσότερα από ένα άτομα; Τώρα, πρέπει να δημιουργήσετε διαφορετικές μεταβλητές για κάθε πληροφορία ανά άτομο: name1, citNo1, gaji1, name2, citNo2, gaji2 κ.λπ.

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

Περισσότερα για τη δομή

  • Δομές και δείκτες
  • Περνώντας δομές σε μια συνάρτηση

ενδιαφέροντα άρθρα...