- Μπορούμε να δηλώσουμε μια
δομή (structure) η οποία θα περιέχει στο εσωτερικό
της δεδομένα διαφορετικών τύπων ή σημασίας με τον ορισμό struct.
Η δήλωση της δομής γίνεται σύμφωνα με την παρακάτω σύνταξη:
struct ετικέτα δομής {
δήλωση μεταβλητής1;
δήλωση μεταβλητής2;
...
};
Το παρακάτω παράδειγμα δηλώνει ένα σημείο το οποίο αποτελείται από
δύο ακέραιες τιμές x και y:
struct s_point {
int x;
int y;
};
Αντίστοιχα το παρακάτω παράδειγμα δηλώνει μια δομή που περιέχει
τα στοιχεία ενός φοιτητή για ένα μάθημα:
struct s_student {
char name[50];
int grade;
};
- Μετά τη δήλωση της δομής η δεσμευμένη λέξη struct ακολουθούμενη
από την
ετικέτα δομής (structure tag) αποτελεί
νέο τύπο.
- Έχοντας δηλώσει την αντίστοιχη δομή μπορούμε να ορίσουμε μεταβλητές
με βάση τη δομή αυτή.
Το παρακάτω παράδειγμα ορίζει μια μεταβλητή p τύπου struct s_point.
struct s_point p;
- Πρόσβαση στα στοιχεία μιας μεταβλητής τύπου struct έχουμε με τη σύνταξη
μεταβλητή.στοιχείο.
Παράδειγμα:
printf("p=(%d, %d)\n", p.x, p.y);
- Μπορούμε να ορίσουμε μεταβλητές με βάση μια δομή
συνδυάζοντας τη δήλωση της δομής με τον ορισμό των μεταβλητών.
Στην περίπτωση αυτή μπορούμε να παραλείψουμε και το όνομα της ετικέτας.
Παράδειγμα:
struct {
int x, y;
} p1, p2;
p1.x = 4;
p1.y = 5;
- Μπορούμε να αντιγράψουμε τα στοιχεία μιας δομής σε μια άλλη ίδια
με τη χρήση του =.
Παράδειγμα:
struct {
int x, y;
} p1, p2;
p1.x = 4;
p1.y = 5;
p2 = p1;
- Ακόμα, μπορούμε να περάσουμε δομές σαν παραμέτρους σε συναρτήσεις
και να ορίσουμε ότι το αποτέλεσμα μιας συνάρτησης είναι μια δομή.
Παράδειγμα (επιστρέφει ένα σημείο ανάμεσα σε δύο άλλα):
struct s_point {
int x, y;
};
struct s_point
middle(struct s_point a, struct s_point b)
{
struct s_point c;
c.x = (a.x + b.x) / 2;
c.y = (a.y + b.y) / 2;
return (c);
}
- Μπορούμε να εκχωρήσουμε αρχικές τιμές σε μια ένωση ακολουθώντας
τον ορισμό της από = και τις αντίστοιχες τιμές για τα μέλη της
μέσα σε άγκιστρα.
Παράδειγμα:
struct s_point origin = {0, 0};