Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

6.4 Οι δομές (structs) στην C

Οι δομές (structs) στην C είναι ένας τρόπος για να ομαδοποιούνται πολλές σχετικές μεταβλητές σε ένα σημείο. Κάθε μεταβλητή στη δομή είναι γνωστή ως μέλος της δομής.

Αντίθετα από έναν πίνακα, μια δομή μπορεί να περιέχει πολλούς διαφορετικούς τύπους δεδομένων (int, float, char, κλπ.).

Η δομή ορίζεται ως εξής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
char name[50];
int age;
float gpa;
};
struct student { char name[50]; int age; float gpa; };
struct student {
    char name[50];
    int age;
    float gpa;
};

Η παραπάνω δομή ορίζει ένα νέο τύπο δεδομένων που ονομάζεται “student”. Ένα αντικείμενο της δομής “student” θα περιέχει τα μέλη “name”, “age” και “gpa”. Μπορούμε να δημιουργήσουμε ένα αντικείμενο της δομής “student” ως εξής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student s1;
struct student s1;
struct student s1;

Για να προσπελάσουμε ένα μέλος της δομής, χρησιμοποιούμε τον τελεστή “.” (τελεία):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
s1.age = 20;
printf("The age of the student is %d\n", s1.age);
s1.age = 20; printf("The age of the student is %d\n", s1.age);
s1.age = 20;
printf("The age of the student is %d\n", s1.age);

Στο παραπάνω παράδειγμα, έχουμε ορίσει το μέλος “age” του αντικειμένου “s1” ως 20, και έπειτα το εκτυπώνουμε.

Μπορούμε επίσης να αρχικοποιήσουμε μια δομή κατά τη δήλωσή της:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student s2 = {"John", 18, 3.5};
struct student s2 = {"John", 18, 3.5};
struct student s2 = {"John", 18, 3.5};

Αυτό θα δημιουργήσει ένα αντικείμενο της δομής “student” με τα μέλη του να έχουν τις αντίστοιχες τιμές.

[adinserter block=”2″]

Μπορούμε να δηλώσουμε έναν δείκτη προς μια δομή με την ίδια σύνταξη όπως οι δείκτες προς άλλους τύπους δεδομένων:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student *ptr;
struct student *ptr;
struct student *ptr;

Για να αναφερθούμε στο μέλος μιας δομής μέσω ενός δείκτη προς αυτήν τη δομή, χρησιμοποιούμε τον τελεστή “->” (βέλος):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ptr->age = 22;
printf("The age of the student is %d\n", ptr->age);
ptr->age = 22; printf("The age of the student is %d\n", ptr->age);
ptr->age = 22;
printf("The age of the student is %d\n", ptr->age);

Στο παραπάνω παράδειγμα, έχουμε ορίσει το μέλος “age” του αντικειμένου στο οποίο δείχνει ο δείκτης “ptr” ως 22, και έπειτα το εκτυπώνουμε.

Η δομή μπορεί επίσης να χρησιμοποιηθεί ως παράμετρος σε μια συνάρτηση ή να επιστραφεί από αυτήν:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student create_student(char name[], int age, float gpa) {
struct student s;
strcpy(s.name, name);
s.age = age;
s.gpa = gpa;
return s;
}
struct student create_student(char name[], int age, float gpa) { struct student s; strcpy(s.name, name); s.age = age; s.gpa = gpa; return s; }
struct student create_student(char name[], int age, float gpa) {
    struct student s;
    strcpy(s.name, name);
    s.age = age;
    s.gpa = gpa;
    return s;
}

Στο παραπάνω παράδειγμα, δημιουργούμε μια νέα δομή “student” με τα μέλη που δίνονται σαν παράμετροι, τοποθετούμε αυτά τα μέλη στο αντικείμενο, και επιστρέφουμε τη δομή.

Μπορούμε να δημιουργήσουμε μια δομή (struct) χρησιμοποιώντας τη λέξη-κλειδί struct και δηλώνοντας τα μέλη της εντός αγκυλών από πίσω:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
char name[50];
int age;
float gpa;
};
struct student { char name[50]; int age; float gpa; };
struct student {
    char name[50];
    int age;
    float gpa;
};

Στο παραπάνω παράδειγμα δημιουργούμε μια δομή “student” η οποία έχει τρία μέλη: το όνομα (αλφαριθμητικό με μέγιστο μήκος 50 χαρακτήρες), την ηλικία (ακέραιος αριθμός) και το βαθμό (πραγματικός αριθμός).

Μπορούμε να δημιουργήσουμε μια νέα δομή “student” χρησιμοποιώντας την παραπάνω δήλωση ως εξής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student s;
struct student s;
struct student s;

Αυτό θα δημιουργήσει ένα νέο αντικείμενο τύπου “student” με τα μέλη του να έχουν αυθαίρετες τιμές.

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

Χρησιμοποιούμε τη λέξη-κλειδί struct μέσα στη συνάρτηση main() και ακολουθούμε με το όνομα της δομής και την όνομασία της μεταβλητής τύπου δομής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int main() {
struct student s;
s.age = 22;
strcpy(s.name, "John");
s.gpa = 3.5;
printf("Name: %s\n", s.name);
printf("Age: %d\n", s.age);
printf("GPA: %f\n", s.gpa);
return 0;
}
int main() { struct student s; s.age = 22; strcpy(s.name, "John"); s.gpa = 3.5; printf("Name: %s\n", s.name); printf("Age: %d\n", s.age); printf("GPA: %f\n", s.gpa); return 0; }
int main() {
    struct student s;
    s.age = 22;
    strcpy(s.name, "John");
    s.gpa = 3.5;
    printf("Name: %s\n", s.name);
    printf("Age: %d\n", s.age);
    printf("GPA: %f\n", s.gpa);
    return 0;
}

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει μια μεταβλητή “s” τύπου δομής “student” και έχουμε ορίσει τα μέλη της δομής μέσω αυτής της μεταβλητής. Έπειτα, τα εκτυπώνουμε με τη χρήση της συνάρτησης printf().

[adinserter block=”3″]

Για να έχουμε πρόσβαση στα μέλη μιας δομής, χρησιμοποιούμε τη σύνταξη με την τελεία (.).

Για παράδειγμα, για να ανατρέξουμε στο μέλος name της δομής “student” που ονομάζεται s, χρησιμοποιούμε την εντολή:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
printf("Name: %s\n", s.name);
printf("Name: %s\n", s.name);
printf("Name: %s\n", s.name);

Ομοίως, για τα μέλη age και gpa, χρησιμοποιούμε την εντολή:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
printf("Age: %d\n", s.age);
printf("GPA: %f\n", s.gpa);
printf("Age: %d\n", s.age); printf("GPA: %f\n", s.gpa);
printf("Age: %d\n", s.age);
printf("GPA: %f\n", s.gpa);

Τώρα μπορείτε εύκολα να δημιουργήσετε πολλαπλές μεταβλητές δομής με διαφορετικές τιμές, χρησιμοποιώντας μόνο μία δομή:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int main() {
struct student s1;
s1.age = 22;
strcpy(s1.name, "John");
s1.gpa = 3.5;
struct student s2;
s2.age = 20;
strcpy(s2.name, "Jane");
s2.gpa = 3.8;
printf("Student 1:\n");
printf("Name: %s\n", s1.name);
printf("Age: %d\n", s1.age);
printf("GPA: %f\n", s1.gpa);
printf("\nStudent 2:\n");
printf("Name: %s\n", s2.name);
printf("Age: %d\n", s2.age);
printf("GPA: %f\n", s2.gpa);
return 0;
}
int main() { struct student s1; s1.age = 22; strcpy(s1.name, "John"); s1.gpa = 3.5; struct student s2; s2.age = 20; strcpy(s2.name, "Jane"); s2.gpa = 3.8; printf("Student 1:\n"); printf("Name: %s\n", s1.name); printf("Age: %d\n", s1.age); printf("GPA: %f\n", s1.gpa); printf("\nStudent 2:\n"); printf("Name: %s\n", s2.name); printf("Age: %d\n", s2.age); printf("GPA: %f\n", s2.gpa); return 0; }
int main() {
    struct student s1;
    s1.age = 22;
    strcpy(s1.name, "John");
    s1.gpa = 3.5;

    struct student s2;
    s2.age = 20;
    strcpy(s2.name, "Jane");
    s2.gpa = 3.8;

    printf("Student 1:\n");
    printf("Name: %s\n", s1.name);
    printf("Age: %d\n", s1.age);
    printf("GPA: %f\n", s1.gpa);

    printf("\nStudent 2:\n");
    printf("Name: %s\n", s2.name);
    printf("Age: %d\n", s2.age);
    printf("GPA: %f\n", s2.gpa);
    return 0;
}

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει δύο διαφορετικές μεταβλητές δομής “student” με τις δικές τους τιμές και τις εκτυπώνουμε.

Να θυμάστε ότι οι συμβολοσειρές στο C είναι στην πραγματικότητα ένας πίνακας από χαρακτήρες, και δυστυχώς δεν μπορείτε να αναθέσετε μια τιμή σε έναν πίνακα με αυτόν τον τρόπο:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
int age;
char name[50];
float gpa;
};
struct student s;
s.name = "John"; // This is invalid!
struct student { int age; char name[50]; float gpa; }; struct student s; s.name = "John"; // This is invalid!
struct student {
    int age;
    char name[50];
    float gpa;
};

struct student s;
s.name = "John"; // This is invalid!

Για να αντιγράψετε μια συμβολοσειρά σε ένα μέλος της δομής, πρέπει να χρησιμοποιήσετε τη συνάρτηση strcpy() από τη βιβλιοθήκη string.h:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
int age;
char name[50];
float gpa;
};
struct student s;
s.age = 22;
strcpy(s.name, "John");
s.gpa = 3.5;
struct student { int age; char name[50]; float gpa; }; struct student s; s.age = 22; strcpy(s.name, "John"); s.gpa = 3.5;
struct student {
    int age;
    char name[50];
    float gpa;
};

struct student s;
s.age = 22;
strcpy(s.name, "John");
s.gpa = 3.5;

Στο παραπάνω παράδειγμα, αναθέτουμε τη συμβολοσειρά “John” στο μέλος name της δομής s χρησιμοποιώντας τη συνάρτηση strcpy().

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

Απλά εισάγετε τις τιμές σε μια λίστα χωρισμένη με κόμματα μέσα σε αγκύλες {}. Να σημειώσουμε ότι με αυτήν την τεχνική δεν χρειάζεται να χρησιμοποιήσετε τη συνάρτηση strcpy() για συμβολοσειρές:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
int age;
char name[50];
float gpa;
};
struct student s = {22, "John", 3.5};
struct student { int age; char name[50]; float gpa; }; struct student s = {22, "John", 3.5};
struct student {
    int age;
    char name[50];
    float gpa;
};

struct student s = {22, "John", 3.5};

Στο παραπάνω παράδειγμα, δηλώνουμε ένα αντικείμενο δομής s τύπου “student”, και αναθέτουμε τις τιμές 22, “John” και 3.5 στα μέλη age, name και gpa αντίστοιχα, χρησιμοποιώντας μια γραμμή κώδικα.

[adinserter block=”4″]

Μπορείτε επίσης να αντιγράψετε μια δομή σε μια άλλη.

Στο παρακάτω παράδειγμα, οι τιμές της s1 αντιγράφονται στην s2:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
int age;
char name[50];
float gpa;
};
struct student s1 = {22, "John", 3.5};
struct student s2;
s2 = s1;
struct student { int age; char name[50]; float gpa; }; struct student s1 = {22, "John", 3.5}; struct student s2; s2 = s1;
struct student {
    int age;
    char name[50];
    float gpa;
};

struct student s1 = {22, "John", 3.5};
struct student s2;

s2 = s1;

Στο παραπάνω παράδειγμα, οι τιμές των μελών age, name και gpa της s1 αντιγράφονται στα αντίστοιχα μέλη της s2.

Αν θέλετε να αλλάξετε / τροποποιήσετε μια τιμή, μπορείτε να χρησιμοποιήσετε τη σύνταξη με την τελεία (.).

Και για να τροποποιήσετε μια τιμή συμβολοσειράς, η συνάρτηση strcpy() είναι και πάλι χρήσιμη:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
int age;
char name[50];
float gpa;
};
struct student s = {22, "John", 3.5};
s.age = 23;
strcpy(s.name, "Mary");
s.gpa = 4.0;
struct student { int age; char name[50]; float gpa; }; struct student s = {22, "John", 3.5}; s.age = 23; strcpy(s.name, "Mary"); s.gpa = 4.0;
struct student {
    int age;
    char name[50];
    float gpa;
};

struct student s = {22, "John", 3.5};

s.age = 23;
strcpy(s.name, "Mary");
s.gpa = 4.0;

Στο παραπάνω παράδειγμα, αλλάζουμε την ηλικία του s από 22 σε 23, το όνομα από “John” σε “Mary”, και το gpa από 3.5 σε 4.0.

Η τροποποίηση τιμών είναι ιδιαίτερα χρήσιμη όταν αντιγράφετε τιμές δομών:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct student {
int age;
char name[50];
float gpa;
};
struct student s1 = {22, "John", 3.5};
struct student s2;
s2 = s1;
s2.age = 23;
strcpy(s2.name, "Mary");
s2.gpa = 4.0;
struct student { int age; char name[50]; float gpa; }; struct student s1 = {22, "John", 3.5}; struct student s2; s2 = s1; s2.age = 23; strcpy(s2.name, "Mary"); s2.gpa = 4.0;
struct student {
    int age;
    char name[50];
    float gpa;
};

struct student s1 = {22, "John", 3.5};
struct student s2;

s2 = s1;
s2.age = 23;
strcpy(s2.name, "Mary");
s2.gpa = 4.0;

Στο παραπάνω παράδειγμα, αντιγράφουμε τις τιμές των μελών της s1 στην s2 και, στη συνέχεια, τροποποιούμε τις τιμές της s2, χωρίς να επηρεάζουμε τις τιμές της s1.

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

Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε μια δομή για να αποθηκεύουμε διαφορετικές πληροφορίες σχετικά με έναν επεξεργαστή (CPU):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
struct cpu {
char brand[20];
char model[20];
int cores;
float frequency;
};
struct cpu my_cpu = {"Intel", "i7", 8, 2.6};
struct cpu { char brand[20]; char model[20]; int cores; float frequency; }; struct cpu my_cpu = {"Intel", "i7", 8, 2.6};
struct cpu {
    char brand[20];
    char model[20];
    int cores;
    float frequency;
};

struct cpu my_cpu = {"Intel", "i7", 8, 2.6};

Στο παραπάνω παράδειγμα, η δομή cpu περιέχει τέσσερα μέλη, τα οποία αντιπροσωπεύουν τον κατασκευαστή, το μοντέλο, τον αριθμό των πυρήνων και τη συχνότητα του επεξεργαστή.

Στη συνέχεια, δημιουργούμε μια μεταβλητή my_cpu τύπου cpu και εκχωρούμε τις τιμές των μελών της δομής σε αυτήν.

Δωρεα μεσω Paypal

Για την κάλυψη αναγκών φιλοξενίας και δημιουργίας περιεχομένου.

κατηγοριες μαθηματων

Ιστορικο ενοτητων

top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων