Μεταβλητές. Έστω η μεταβλητή

Σχετικά έγγραφα
Διαδικαστικός Προγραμματισμός

Διαδικαστικός Προγραμματισμός

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός (ΤΛ1006)

Γλώσσες Προγραμματισμού

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Ανάπτυξη και Σχεδίαση Λογισμικού

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Περιεχόμενα. Πρόλογος... 17

Διαδικασιακός Προγραμματισμός

Οι δείκτες στη γλώσσα C

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εισαγωγή στον Προγραμματισμό

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

Γλώσσες Προγραμματισμού

Διάλεξη 11η: Δείκτες, μέρος 1

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Περιεχόμενα. Πρόλογος... 21

Διδάσκων: Παναγιώτης Ανδρέου

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Διαδικασιακός Προγραμματισμός

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Δομημένος Προγραμματισμός (ΤΛ1006)

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Εισαγωγή στον Προγραμματισμό (με. τη C)

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στην γλώσσα προγραμματισμού C

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Δομημένος Προγραμματισμός

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

ιαφάνειες παρουσίασης #5 (β)

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Προγραμματισμός Υπολογιστών με C++

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Υπολογιστών

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Διαδικαστικός Προγραμματισμός

Η γλώσσα προγραμματισμού C

Συναρτήσεις και διαδικασίες

Προγραμματισμός Συστημάτων

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δομημένος Προγραμματισμός (ΤΛ1006)

Μεθόδων Επίλυσης Προβλημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Ανάπτυξη και Σχεδίαση Λογισμικού

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Διαδικαστικός Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Δομές Δεδομένων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαδικασιακός Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Ασκήσεις - Μελέτες περίπτωσης για το μάθημα Προγραμματισμός II

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Η γλώσσα προγραμματισμού C

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

Διάλεξη 9η: Πίνακες (arrays)

Διδάσκων: Παναγιώτης Ανδρέου

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Δομημένος Προγραμματισμός

Μεθόδων Επίλυσης Προβλημάτων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Διάλεξη 5: Δείκτες και Συναρτήσεις

Προγραμματισμός Υπολογιστών με C++

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Δομημένος Προγραμματισμός (ΤΛ1006)

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Εισαγωγή στον Προγραμματισμό

Γλώσσα Προγραμματισμού C

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

5 &6. Τύποι δεδομένων, τελεστές και

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Η βασική συνάρτηση προγράμματος main()

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

Σημειώσεις έκτης και έβδομης εβδομάδας

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Υπερφόρτωση Τελεστών

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Transcript:

Δείκτες

Μεταβλητές Έστω η μεταβλητή char ch ='A'; Η παραπάνω δήλωση δεσμεύει χώρο στη μνήμη για τη μεταβλητή ch. Η τιμή της ch αντιστοιχεί στο περιεχόμενο μιας θέσης μνήμης, π.χ. της 1001. 0 1 2 3... 1000 1001 1002... 655355 65

Δείκτες Στη C επιτρέπονται μεταβλητές που περιέχουν τη διεύθυνση μιας άλλης μεταβλητής. int i = 12; Η δήλωση ενός δείκτη γίνεται ως εξής στη θέση μνήμης της μεταβλητής i γίνεται ως εξής: int *p; p = &i; 1000 1001 1002 1003... 2000 2001 1002 1003 1004 1005... 655354 655355 12 1000

Δήλωση δεικτών τύπος_βάσης * μεταβλητή_δείκτη; όπου τύπος_βάσης ο τύπος της μεταβλητής που δείχνει ο δείκτης μεταβλητή_δείκτη είναι το όνομα της μεταβλητής που δηλώνεται int *p; char *cptr;

Τελεστές για το χειρισμό δεικτών & διεύθυνση * τιμή στην οποία δείχνει Παράδειγμα int *p; p = &i; Η p έχει την τιμή 1000 Η *p 12 1000 1001 1002 1003... 2000 2001 1002 1003 1004 1005... 655354 655355 12 1000

Ένα ακόμη παράδειγμα int x,y; int *p1, *p2; 1000 x 1004 y 1008 p1 1012 p2

Ένα ακόμη παράδειγμα x= - 42; y = 163; 1000-42 x 1004 163 y 1008 p1 1012 p2

Ένα ακόμη παράδειγμα p1 = &x; p2 = &y; 1000-42 x 1004 163 y 1008 1000 p1 1012 1012 p2

Ένα ακόμη παράδειγμα *p1 = 17; 1000 17 x 1004 163 y 1008 1000 p1 1012 1004 p2

Ένα ακόμη παράδειγμα p1 = p2; 1000 17 x 1004 163 y 1008 1004 p1 1012 1004 p2

Εναλλακτικά *p1 = *p2; 1000 163 x 1004 163 y 1008 1000 p1 1012 1004 p2

Ο ειδικός δείκτης NULL Ειδική τιμή που δηλώνει ότι ένας δείκτης δείχνει σε μια μη έγκυρη διεύθυνση. Δεν επιτρέπεται η πρόσβαση στην τιμή ενός δείκτη που έχει τιμή NULL. Μια τέτοια κλήση έχει ως αποτέλεσμα, συνήθως, την κατάρρευση του προγράμματος. p = NULL; *p = 1; /* Το πρόγραμμα θα καταρρεύσει */

Μεταβίβαση παραμέτρων με αναφορά Η κλήση μιας συνάρτησης στη C δεν αλλάζει τις τιμές των παραμέτρων της συνάρτησης (κλήση με τιμή) Παράδειγμα void SetToZero(int var) { } var = 0; Η κλήση της παραπάνω συνάρτησης δεν έχει κανένα αποτέλεσμα πάνω στο όρισμά της

Η κλήση int x=10; SetToZero(x); /* το x εξακολουθεί να έχει την τιμή 10... */ δεν έχει κανένα αποτέλεσμα

Κλήση με αναφορά Για την επίλυση του παραπάνω προβλήματος περνάμε ως παράμετρο όχι τη μεταβλητή αλλά τη διεύθυνσή της. void SetToZero(int *ip) { } *ip=0; Στην περίπτωση αυτή η κλήση της συνάρτησης αλλάζει την τιμή της παραμέτρου ΠΡΟΣΟΧΗ στον τρόπο περάσματος της διεύθυνσης της μεταβλητής.

Κλήση με αναφορά (2) int x = 10; SetToZero(&x); /* Τώρα είναι x = 0 */

Νέα συνάρτηση ανταλλαγής ακεραίων void SwapInteger(int *p1, int *p2) { } int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp;

Μια συνάρτηση που επιστρέφει πολλές τιμές Είσοδος: Ένα χρονικό διάστημα σε λεπτά της ώρας Έξοδος: το χρονικό διάστημα σε ώρες και λεπτά Η επικεφαλίδα της αντίστοιχης συνάρτησης: void ConvertTimeToHM(int time, int *phours, int *pminutes);

#define MinutesPerHour 60 /* Function prototypes */ Παράδειγμα static void ConvertTimeToHM(int time, int *phours, int *pminutes); main() { int time, hours, minutes; } printf("test program to convert time values\n"); printf("enter a time duration in minutes: "); time = GetInteger(); ConvertTimeToHM(time, &hours, &minutes); printf("hh:mm format: %d:%02d\n", hours, minutes); static void ConvertTimeToHM(int time, int *phours, int *pminutes) { *phours = time / MinutesPerHour; *pminutes = time % MinutesPerHour; }

Δείκτες και πίνακες Η παράσταση double list[3]; ορίζει έναν πίνακα 3 στοιχείων Το &list[0] είναι η διεύθυνση του πρώτου στοιχείου του πίνακα Η έκφραση &list[0] είναι ισοδύναμη με την list. 1000 1008 1016 list[0] list[1] list[2]

Πίνακες ως ορίσματα συναρτήσεων Η δήλωση void f(int a[]); είναι ισοδύναμη με την void f(int *a);

Πίνακες ως δείκτες 1000 2.0 list[0] Η διεύθυνση του στοιχείου list[1] είναι η list + 1 *sizeof (double) 1008 1016 5.4 4.78 list[1] list[2] Η παράσταση list + 1 αντιστοιχεί στην παραπάνω διεύθυνση (ο υπολογισμός γίνεται αυτόματα) *(list + 1) = 5.4;

Αριθμητική δεικτών Η έκφραση p + n όπου p δείκτης και n ένας ακέραιος εννοεί τη διεύθυνση του n-οστού αντικειμένου μετά από αυτό που δείχνει ο p. Έχουν νόημα οι εξής παραστάσεις p - k p1 p2

Οι τελεστές ++ και -- Μεταθεματική μορφή i++ Αποτιμάται η έκφραση και και μετά αυξάνει κατά 1 i-- Προθεματική μορφή ++i Πρώτα αυξάνει κατά 1 και μετά αποτιμάται η έκφραση --i

Παραδείγματα int x,y; x = 5; y = ++x; Αλλά int x,y; x = 5; y = x++;

Αύξηση και μείωση δεικτών Η έκφραση *p++ ισοδυναμεί με την *(p++) Η έκφραση p++; για ένα δείκτη σε ακαίρεο αυξάνει τον δείκτη ώστε να δείχνει στον επόμενο ακέραιο.

Δυναμική κατανομή μνήμης: malloc και free Η συνάρτηση malloc int *p = (int *) malloc(sizeof int); Δυναμικοί πίνακες char * cp = (char *) malloc( 10 * sizeof (char)); Η συνάρτηση free(void * p); αποδεσμεύει την περιοχή μνήμης στην οποία δείχνει ο p και η οποία είχε προηγουμένως δεσμευτεί.