Είσοδος/έξοδος χαμηλού επιπέδου

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δομές στην C (επανάληψη)
Advertisements

Το αλφαριθμητικό (string)
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11.
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 19 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 1.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Υποθετικός τελεστής Ο υποθετικός τελεστής (?:) αποτελείται από δύο σύμβολα. Ανήκει στην κατηγορία των τελεστών που αποτελούνται από συνδυασμό συμβόλων.
Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4 1.
Ντίρλης Νίκος- ΕΤΥ 4ο ΦΡΟΝΤΙΣΤΗΡΙΟ Παρασκευή Β4 1.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Εντολές Ελέγχου Ροής.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας.
University of Cyprus Department of Computer Science Presenter : Yiannos Mylonas EPL475: Advanced Networks TCP/IP Socket Programming in C.
ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Επανάληψη.
9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
2/28/00epl-1311 Παραδειγματα Aλγοριθμων Αριθμος λεξεων που διαβαστηκαν απο εισοδο Εκτυπωση περιφερειας τετραγωνων με * Υπολογισμος exp(x,n) = 1 + x/1!
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
HY150Ξενοφών Ζαμπούλης HY150 Ε π ι π λέον στοιχεία της C.
7-1 ΜΑΘΗΜΑ 7 ο Περισσότερα για Κυκλικές και Διπλά Διασυνδεόμενες Λίστες, Συναρτήσεις Βιβλιοθήκης, Διαχείριση Αρχείων.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Επιπλέον στοιχεία της C.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C & C++ Δ.Π.Θ. - ΤΜΗΜΑ Μ.Π.Δ. ΕΞΑΜΗΝΟ Α’
Τεχνολογία και Προγραμματισμός Υπολογιστών Ενότητα 9: Αρχεία - Λίστες Επίκουρος Καθηγητής Χρήστος Μακρής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο.
1 ο Εργαστήριο: Κατασκευή Εφαρμογών Client-Server echoserver και echoclient – Κώδικας εφαρμογών σε C Μπαλόμπας Παναγιώτης 8ο ΕΠΑΛ Θεσσαλονίκης 1 /* Αρχείο.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 4: Επαναληπτικές δομές. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής. Τμήμα Μηχανικών.
Λειτουργικά Συστήματα Ενότητα # 4: Συστήματα Αρχείων Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής.
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ 1 Εισαγωγή στη γλώσσα Προγραμματισμού C ΠΙΝΑΚΕΣ (arrays)
Αντικειμενοστραφής Προγραμματισμός (Θ) Ενότητα 5: Είσοδος/ Έξοδος Κλειώ Σγουροπούλου Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Ανοικτά Ακαδημαϊκά Μαθήματα στο.
ΔΟΜΗ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ C 1.Σχόλια 2.Οδηγίες προεπεξεργαστή 3.Ορισμοί τύπων 4.Δηλώσεις συναρτήσεων (πρωτότυπα) 5.Ορισμός της main 6.Ορισμοί συναρτήσεων.
Αντικειμενοστραφής Προγραμματισμός
Προτάσεις, εκφράσεις, τελεστές Βασικά στοιχεία ελέγχου προγράμματος
Επανάληψη.
Χαρακτήρες και συμβολοσειρές
Η γλώσσα C Προγραμματισμός Ι
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Βασικές Έννοιες Εισόδου-Εξόδου Πίνακες και Δείκτες
Ενισχυτική διδασκαλία
Π Ι Ν Α Κ Ε Σ (arrays) ΤΑΞΙΝΟΜΗΣΗ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Τεχνολογία και Προγραμματισμός Υπολογιστών
Δομές.
Προγραμματισμός Ι Εισαγωγικά θέματα.
Πίνακες Προγραμματισμός Ι
Βασικές έννοιες του Unix
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Ενισχυτική διδασκαλία
Ενισχυτική διδασκαλία
ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ Η εντολή if if ( παράσταση) εντολή επόμενη εντολή.
for (παράσταση_1; παράσταση_2; παράσταση_3)
Ταξινόμηση Ορισμός: Δοθέντων των στοιχείων a1,a2,… ,an η ταξινόμηση συνίσταται στην αντιμετάθεση της θέσης των στοιχείων ώστε να τοποθετηθούν με μια νέα.
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
Εκπαιδευτικό Λογισμικό Function Probe (FP)
Αρχές Προγραμματισμού (C)
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Stack[ ] Queue[ ] 7 9 本試卷全部試題均須回答。
ΑΣΚΗΣΕΙΣ C.
ΑΣΚΗΣΕΙΣ.
Μεταγράφημα παρουσίασης:

Είσοδος/έξοδος χαμηλού επιπέδου Επειδή η γλώσσα C έχει αναπτυχθεί παράλληλα με το λειτουργικό σύστημα UNlX και επειδή οι εφαρμογές απαιτούν έλεγχο των διαδικασιών εισόδου/εξόδου στους δίσκους σε επίπεδο λειτουργικού συστήματος καθώς και έλεγχο των επικοινωνιών μεταξύ των υπολογιστών (δίκτυα υπολογιστών), έχει δημιουργηθεί ένα δεύτερο υποσύστημα εισόδου/εξόδου των αρχείων

Είσοδος/έξοδος χαμηλού επιπέδου Οι συναρτήσεις χαμηλού επιπέδου εισόδου/εξόδου είναι οι ακόλουθες : ·       read( ) ·       write( ) ·       open( ) ·       close( ) ·       creat( ) ·       unlink( )

Οι συναρτήσεις open( ), close( ) int fd; fd = open ("όνομα_αρχείου", τύπος)   .......................... close(fd); Τύπος Αποτέλεσμα ανάγνωση του αρχείου 1 γραφή στο αρχείο 2 ανάγνωση/γραφή στο αρχείο

Οι συναρτήσεις write( ) και read( )   #define BUF_SIZE 128 int fd ; char buf[BUF_SIZE]; write(fd, buf, BUF_SIZE) ; Ο γενικός τύπος της read( ) είναι : read (fd, buf, BUF_SIZE) ;

Πρόγραμμα επίδειξης των εντολών εισόδου/εξόδου χαμηλού επιπέδου (διαβάζει από το πληκτρολόγιο μέχρι να βρει τους χαρακτήρες *** και αφού εγγράψει σε ένα αρχείο τα δεδομένα, το ανοίγει διαβάζει το περιεχόμενο και το εμφανίζει στην οθόνη) #include <stdio.h> # define BUF_SIZE 128 main( ) { char buf[BUF_SIZE]; int fda, fdb, t; if((fda=open("testdisk",1)) = = -1) printf("Το αρχείο δεν ανοίγει\n"); exit(0); } συνεχίζεται...

... συνέχεια input(buf, fda); close(fda); if((fdb=open("testdisk", 0)) = = -1) { printf("Το αρχείο δεν ανοίγει\n"); exit(0); } display(buf,fdb); close(fdb); συνεχίζεται...

... συνέχεια input(buf, fda) char *buf; int fda; { do { gets(buf); if (write(fda, buf, BUF_SIZE) != BUF_SIZE) printf("Πρόβλημα κατά την εγγραφή στο αρχείο\n"); exit(0); } } while ( !strcmp(buf,"***")); συνεχίζεται...

... συνέχεια display(buf,fdb) char *buf; int fdb; { do { if(read(fdb,buf,BUF_SIZE) < 0) { printf("Πρόβλημα κατά την ανάγνωση του αρχείου\n"); exit(0); } printf(buf); } while ( !strcmp(buf,"***"));

Γράψτε ένα πρόγραμμα που να χρησιμοποιεί είσοδο/έξοδο χαμηλού επιπέδου, το οποίο θα αντιγράφει ένα αρχείο σ’ ενα άλλο. Να μη χρησιμοποιηθούν παράμετροι γραμμής εντολής για τον ορισμό των αρχείων αλλά να ορίζονται μέσα στο πρόγραμμα.

#include <stdio.h> main() { char ch[128]; int fp1, fp2; if((fp1= open("first.dat", 0 ))== -1 ) printf("Δεν μπορώ ν’ ανοίξω το αρχικό αρχείο.\n"); exit (0); } συνεχίζεται...

... συνέχεια if((fp2= open(" second.dat", 1 )) == -1 ) { printf("Δεν μπορώ ν’ ανοίξω το τελικό αρχείο. \n"); exit(0); } while(read(fp1,ch,128) != EOF) write(fp2,ch,128); close(fp1); close(fp2);

Η συνάρτηση fflush ( ) Η συνάρτηση fflush( ) χρησιμοποιείται όταν θέλουμε να μεταφέρουμε χειρονακτικά το περιεχόμενο της προσωρινής μνήμης (buffer) των ανοικτών αρχείων προς το περιφερειακό μέσο το οποίο αναμένει το αποτέλεσμα των συναρτήσεων εξόδου. Ο γενικός τύπος της συνάρτησης fflush( ) είναι: int fflush (δείκτης αρχείου); Εάν δεν προσδιορίζεται ένα συγκεκριμένο αρχείο σαν παράμετρος κατά την κλήση της συνάρτησης fflush( ) τότε αδειάζουν όλες οι προσωρινές μνήμες των ανοικτών αρχείων και μεταφέρεται το περιεχόμενό τους προς τα ανοικτά αρχεία.

Σημείωση. ‘Όταν σε ένα πρόγραμμα της γλώσσας C, δεν λειτουργεί σωστά η συνάρτηση scanf( ) θα πρέπει να προηγηθεί μια κλήση της συνάρτησης fflush(stdin) για να αδειάσει η προσωρινή περιοχή της μνήμης η οποία περιέχει κάποια πληροφορία από προηγούμενη κλήση της συνάρτησης scanf( )

Δομές και Ενώσεις Η γλώσσα C επιτρέπει να δημιουργήσουμε καινούργιους τύπους δεδομένων με δύο τρόπους: πρώτον, ενώνοντας πολλές μεταβλητές σε μία συμπυκνωμένη μεταβλητή που λέγεται δομή (Structure) και δεύτερον, χρησιμοποιώντας την ένωση (union) για να μοιρασθούν πολλές μεταβλητές την ίδια περιοχή της μνήμης.

Δομές (Structures) Λέμε δομή τη συλλογή πολλών μεταβλητών οι οποίες θα αναφέρονται με το ίδιο όνομα και δεν θα αποτελούν συνεχόμενες θέσεις μνήμης, όπως οι πίνακες. Ο ορισμός μιας δομής αποτελεί ένα πρότυπο, το οποίο μπορεί να χρησιμοποιηθεί προκειμένου να δημιουργηθούν κάποιες μεταβλητές που να ανήκουν στη δομή. Κάθε δομή αποτελείται από μία ή περισσότερες μεταβλητές οι οποίες είναι λογικά συνδεδεμένες μεταξύ τους. Αυτές οι μεταβλητές λέγονται στοιχεία της δομής.

Ορισμός Ο γενικός τύπος ορισμού μιας δομής είναι : struct όνομα-δομής   struct όνομα-δομής { τύπος-όνομα μεταβλητής; .   } μεταβλητές-δομής;

Παράδειγμα Το όνομα και η διεύθυνση σε έναν κατάλογο είναι μία συνηθισμένη ομάδα συγγενικών πληροφοριών. Η δομή η οποία περιέχει το όνομα, τη διεύθυνση, την οδό, την πόλη και τον κωδικό της πόλης, μπορεί να γραφτεί :   struct address { char name[30]; char street[40]; char city[20]; unsigned int zip; };

Με τον τρόπο αυτό, δεν έχει δηλωθεί καμία μεταβλητή. Μόνο ο τύπος των δεδομένων έχει ορισθεί. Για να δηλώσουμε μια συγκεκριμένη μεταβλητή η οποία θα ανήκει σ’ αυτή τη δομή (address) θα πρέπει να γράψουμε : struct address info1; Όταν ορίζουμε μια δομή, στην ουσία δηλώνουμε ένα σύνθετο τύπο μεταβλητής που αποτελείται από τα στοιχεία της δομής.

Επεξεργασία των στοιχείων μιας δομής  Ο γενικός τύπος αναφοράς σ’ ένα στοιχείο μιας μεταβλητής κάποιας δομής είναι:   όνομα-μεταβλητής-δομής . όνομα-στοιχείου-δομής Η τελεία συνήθως ονομάζεται τελεστής τελεία (dot operator) και σημαίνει ότι ακολουθεί ένα στοιχείο της μεταβλητής που αναφέρεται πριν την τελεία.  Π.χ. γράφουμε :   info1.zip = 12345;

Av θέλουμε να προσεγγίσουμε κάθε ένα από τα στοιχεία του πίνακα name ξεχωριστά, θα μπορούσαμε να χρησιμοποιήσουμε μια εντολή ανακύκλωσης. Για παράδειγμα, θα μπορούσαμε να συμπληρώσουμε το περιεχόμενο του πίνακα name χρησιμοποιώντας τις εντολές:   int t; for(t=0; info1.name[t]; ++t ) putchar(info1.name[t]);

Πίνακες δομών Προκειμένου να δηλώσουμε έναν πίνακα δομών πρέπει πρώτα να ορίσουμε μία δομή και μετά να δηλώσουμε μία μεταβλητή πίνακα, αυτού του τύπου. Για παράδειγμα, αν θέλουμε να δηλώσουμε ένα πίνακα δομών με 300 στοιχεία του τύπου address, θα πρέπει να γράψουμε:   struct address info[300]; Υπενθύμιση. Όπως όλες οι μεταβλητές που είναι πίνακες έτσι και οι πίνακες δομών αρχίζουν την αρίθμηση από το 0.

Παράδειγμα Αν θέλουμε να δημιουργήσουμε ένα πίνακα δομών για να αποθηκεύσει και να επεξεργαστεί τις πληροφορίες των πελατών-συνδρομητών μιας εταιρείας, μπορούμε να δημιουργήσουμε μια δομή δεδομένων, (client), η οποία θα κρατήσει αυτές τις πληροφορίες :   struct client { char name[30]; char street[40]; char city[20]; char state[3]; unsigned int zip; } info[300];  

main( ) // Κυρίως πρόγραμμα (Μενού επιλογών) { char s[80], choice; init_list( ); do { choice=menu_select( ); switch(choice) case 1: enter( ); break; case 2: delete( ); case 3: list( ); case 4: exit(0); } } while(1);

menu_select( ) { char s[80]; int c; printf("1. Enter a name\n"); printf("2. Delete a name\n"); printf("3. List the file\n"); printf("4. Quit\n"); do { printf("\nEnter your choice: "); gets(s); c=atoi(s); } while(c<1 ¦ ¦ c>4); return c; }

enter( ) { int slot; slot = find_free( ); if(slot = = -1) printf("\n list full"); return; } printf("enter name "); gets(info[slot].name); printf("enter street:"); gets(info[slot].street); printf("enter city: "); gets(info[slot].city); printf("enter state: "); gets(info [slot].state); printf("enter zip: "); scanf("%d",&info[slot].zip);

find_free( ) { int t; for(t=0; info[t].name[0] && t<300; ++t) if(t = = 300) return -1; return t; }

printf("enter record #: "); gets( ); slot = atoi(s); delete( ) { int slot; char s[80]; printf("enter record #: "); gets( ); slot = atoi(s); if(slot>0 && slot < 300) info[slot].name[0]='\0'; }

list( ) { int t; for(t=0; t<300; ++t) if(info[t].name[0]) printf("%s\n",info[t].name); printf("%s\n",info[t].street); printf("%s\n",info[t].city); printf("%s\n",info [t].state); printf( "%u\n",info[t].zip) ; } printf("\n");

Μεταφορά στοιχείων δομής σε συνάρτηση Όταν περνά ένα στοιχείο μίας δομής σε μία συνάρτηση, στην πραγματικότητα περνά η τιμή αυτού του στοιχείου στη συνάρτηση, όπως ακριβώς περνά μία απλή μεταβλητή.  Αν είχαμε τη δήλωση:   struct test { int x; char s[15]; } image;   Τότε η κλήση : function1(image.x); σημαίνει ότι περνά στη συνάρτηση function1 η τιμή του στοιχείου image.x της μεταβλητής image  

ενώ η κλήση : function2(image.s[2]);   σημαίνει ότι περνά στη συνάρτηση function2 η τιμή της τρίτης κατά σειρά θέσης του στοιχείου image.s, δηλαδή το τρίτο στοιχείο του πίνακα s. Αν θέλουμε να περάσουμε τη διεύθυνση μεμονωμένων στοιχείων της δομής ξεχωριστά σε μια συνάρτηση, θα πρέπει να χρησιμοποιήσουμε τον τελεστή &, μπροστά από το όνομα της δομής. Προκειμένου να περάσουμε τη διεύθυνση των δύο στοιχείων της μεταβλητής image, θα πρέπει να γράψουμε: function1(&image.x); function2(&image.s[2]);

Μεταφορά ολόκληρης δομής σε συνάρτηση Όταν μία δομή περνά σε μία συνάρτηση, μόνο η διεύθυνση του πρώτου χαρακτήρα (πρώτο byte) της δομής μεταφέρεται στη συνάρτηση. Αυτός ο τρόπος είναι παρόμοιος με τον τρόπο που περνούν οι πίνακες σε συναρτήσεις. Π.χ. Έστω η μεταβλητή time της δομής xronos struct xronos { int hours; int minutes; int seconds; } time;  

Όταν η δομή αυτή μεταφερθεί σε μια συνάρτηση, θα πρέπει να χρησιμοποιείται με τον ακόλουθο τρόπο : display(t) struct xronos *t; { printf("%d:", (*t).hours); printf("%d:", (*t).minutes); printf("%d\n", (*t).seconds); } Σημείωση. Οι παρενθέσεις γύρω από το *t είναι απαραίτητες επειδή ο τελεστής τελεία έχει υψηλότερη προτεραιότητα απ’ ό,τι ο τελεστής *

Τελεστής βέλος Επειδή οι αναφορές σε μια δομή που έχει περάσει σε μία συνάρτηση συμβαίνουν συχνά, γι αυτό η γλώσσα C έχει ένα ειδικό τελεστή, που λέγεται «τελεστής βέλος» και γράφεται - > 0 τελεστής -> χρησιμοποιείται εναλλακτικά στη θέση του τελεστή-τελεία όταν προσεγγίζουμε ένα στοιχείο δομής μέσα σε μία συνάρτηση. Για παράδειγμα, η γραφή :   (*t).hours είναι το ίδιο με τη γραφή :   t->hours

Πίνακες και Δομές Κάθε στοιχείο της δομής μπορεί να είναι απλό ή σύνθετο. Μια δομή μπορεί να είναι στοιχείο μιας άλλης δομής, όπως στο ακόλουθο παράδειγμα: struct boy { struct address newaddress[2]; char ch; } tom; Π.χ. μπορούμε να γράψουμε :   tom.newaddress[1].zip = 67100;

Δυαδικά πεδία (πεδία Bits) Σαν μια γνήσια γλώσσα μέσου επιπέδου η γλώσσα C, μπορεί να προσεγγίζει εύκολα μεμονωμένα bits μέσα σε ένα byte. Αυτό μπορεί να αποδειχθεί χρήσιμο: Όταν έχουμε μεγάλο όγκο δεδομένων και ο αποθηκευτικός χώρος είναι περιορισμένος, Ορισμένες συσκευές επικοινωνιών (modem, scanner κτλ.) μεταφέρουν τις πληροφορίες κωδικοποιημένες σε μια διαδοχική σειρά από bits αποθηκευμένα μέσα σε ένα byte. Αντί να χρησιμοποιήσουμε τους τελεστές bitwise, η χρησιμοποίηση ενός πεδίου από bits μπορεί να προσθέσει περισσότερη ευελιξία και ταχύτητα στο πρόγραμμα.

Παράδειγμα Μπορούμε να ορίσουμε τέσσερα μέλη μιας δομής και το κάθε ένα να έχει μέγεθος ενός bit με τη δομή: struct newdevice { unsigned active : 1; unsigned ready : 1; unsigned error : 1; unsigned stop : 1; } code;

ΑΣΚΗΣΕΙΣ 1. Ορίστε μία δομή η οποία θα μπορεί ν’ αποθηκεύει τις παρακάτω πληροφορίες:   όνομα ομάδας όνομα παίκτη ηλικία αριθμός φανέλας

Απάντηση { char player_team[20]; char player_ name[30]; struct player { char player_team[20]; char player_ name[30]; int player_ age; int player_ number; };

ΑΣΚΗΣΕΙΣ Χρησιμοποιώντας τη δομή της προηγούμενης άσκησης, δηλώστε ένα πίνακα δομών για τις ανάγκες ενός προβλήματος όπου θα επεξεργαστούμε 4 παίκτες μιας ομάδας. Απάντηση : . struct player group[4];

ΑΣΚΗΣΕΙΣ 3. Να γράψετε μία συνάρτηση η οποία με τη βοήθεια ερωτήσεων στην οθόνη να ζητά να πληκτρολογηθούν: όνομα ομάδας όνομα παίκτη ηλικία αριθμός φανέλας χρησιμοποιώντας τον πίνακα δομών της προηγούμενης άσκησης. Η συνάρτησή να έχει μια παράμετρο η οποία θα είναι ο δείκτης ενός στοιχείου του πίνακα.

ΑΣΚΗΣΕΙΣ 4. Να γράψετε και ένα πλήρες πρόγραμμα το οποίο με τη βοήθεια των ασκήσεων 1., 2., 3. θα συμπληρώνει στη μνήμη τα στοιχεία 4 παικτών και στη συνέχεια θα υπολογίζει και να εμφανίζει στην οθόνη τη μέση τιμή της ηλικίας τους