Pointers. Σημερινό Μάθημα! Χρήση pointer Τελεστής * Τελεστής & Γενικοί δείκτες Ανάκληση Δέσμευση μνήμης new / delete Pointer σε αντικείμενο 2

Σχετικά έγγραφα
Συναρτήσεις & Κλάσεις

Αναφορές (References)

Συναρτήσεις. Σημερινό μάθημα

Κληρονομικότητα. Σήμερα! Κλάση Βάσης Παράγωγη κλάση Απλή κληρονομικότητα Protected δεδομένα Constructors & Destructors overloading

Συναρτήσεις ΙΙ. Σημερινό μάθημα

Κληρονομικότητα. Σήμερα!

Ειδικά Θέματα Ι. Σήμερα!

Ειδικά Θέματα. Σήμερα. Ισότητα Αντικειμένων Friend classes Operator overloading

Classes. Σημερινό Μάθημα. Constructor και destructor Συναρτήσεις μέλη const Inline συναρτήσεις Δηλώσεις κλάσεων Σύνθετες κλάσεις

Αναγνώριση Προτύπων. Σήμερα! Λόγος Πιθανοφάνειας Πιθανότητα Λάθους Κόστος Ρίσκο Bayes Ελάχιστη πιθανότητα λάθους για πολλές κλάσεις

Πολυμορφισμός. Σήμερα!

Πολυμορφισμός. Σήμερα! Virtual Κληρονομικότητα Mixin classes Αφηρημένοι τύποι δεδομένων Pure Virtual συναρτήσεις

Αντικειμενοστραφής. Προγραμματισμού

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

Αποδεικτικές Διαδικασίες και Μαθηματική Επαγωγή.

Έννοια. Η αποδοχή της κληρονομίας αποτελεί δικαίωμα του κληρονόμου, άρα δεν

HY 280. θεμελιακές έννοιες της επιστήμης του υπολογισμού ΑΣΚΗΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ. Γεώργιος Φρ.

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ

Αναγνώριση Προτύπων. Σημερινό Μάθημα

{ i f i == 0 and p > 0

Δ Ι Α Κ Ρ Ι Τ Α Μ Α Θ Η Μ Α Τ Ι Κ Α. 1η σειρά ασκήσεων

Αναγνώριση Προτύπων. Σημερινό Μάθημα

ΤΑΞΙΝΟΜΗΣΗ ΟΡΓΑΝΙΣΜΩΝ

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

Ψηφιακή Εικόνα. Σημερινό μάθημα!

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

5.1 Μετρήσιμες συναρτήσεις

Διάρκεια: 2 ώρες 17/9/2009 ΘΕΜΑΤΑ 1) (2 μονάδες) Δεδομένης της περιγραφής που ακολουθεί δώστε το σχεδιασμό κλάσεων του συστήματος:

Εισαγωγικά. 1.1 Η σ-αλγεβρα ως πληροφορία

21/11/2005 Διακριτά Μαθηματικά. Γραφήματα ΒΑΣΙΚΗ ΟΡΟΛΟΓΙΑ : ΜΟΝΟΠΑΤΙΑ ΚΑΙ ΚΥΚΛΟΙ Δ Ι. Γεώργιος Βούρος Πανεπιστήμιο Αιγαίου

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Πρώτη Γραπτή Εργασία. Εισαγωγή στους υπολογιστές Μαθηματικά

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

Αριθμητικοί αλγόριθμοι

ΘΕΜΑ 1ο Α. α) Δίνεται η συνάρτηση F(x)=f(x)+g(x). Αν οι συναρτήσεις f, g είναι παραγωγίσιμες, να αποδείξετε ότι: F (x)=f (x)+g (x).

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

ΣΤΟ ΦΑΡΜΑΚΕΙΟ. Με την πιστοποίηση του έχει πρόσβαση στο περιβάλλον του φαρμακείου που παρέχει η εφαρμογή.

Οι γέφυρες του ποταμού... Pregel (Konigsberg)

«ΔΙΑΚΡΙΤΑ ΜΑΘΗΜΑΤΙΚΑ»

ΣΥΝΟΛΑ (προσέξτε τα κοινά χαρακτηριστικά των παρακάτω προτάσεων) Οι άνθρωποι που σπουδάζουν ΤΠ&ΕΣ και βρίσκονται στην αίθουσα

Ο Ισχυρός Νόμος των Μεγάλων Αριθμών

Ανελίξεις σε συνεχή χρόνο

ΠΑΝΕΠΙΣΤΗΜΙΑΚΑ ΦΡΟΝΤΙΣΤΗΡΙΑ ΚΟΛΛΙΝΤΖΑ ΜΑΘΗΜΑ: ΟΙΚΟΝΟΜΙΚΗ ΘΕΩΡΙΑ

Εστω X σύνολο και A μια σ-άλγεβρα στο X. Ονομάζουμε το ζεύγος (X, A) μετρήσιμο χώρο.

Κλάσεις και αντικείμενα #include <iostream.h<

Σχέσεις και ιδιότητές τους

Ταξινόμηση των μοντέλων διασποράς ατμοσφαιρικών ρύπων βασισμένη σε μαθηματικά κριτήρια.

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

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

Projects για το εργαστήριο. των Βάσεων Δεδομένων

Προτεινόμενα θέματα στο μάθημα. Αρχές Οικονομικής Θεωρίας ΟΜΑΔΑ Α. Στις προτάσεις από Α.1. μέχρι και Α10 να γράψετε στο τετράδιό σας τον αριθμό της

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΤΡΙΤΗ 20 ΙΟΥΝΙΟΥ 2000 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ ΕΠΙΛΟΓΗΣ : ΑΡΧΕΣ ΟΙΚΟΝΟΜΙΚΗΣ ΘΕΩΡΙΑΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΠΕΝΤΕ (5)

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Μεταγλωττιστές ΙΙ. Γέννηση ενδιάμεσης αναπαράστασης. 10 Νοεμβρίου Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

ΣΤΟ ΙΑΤΡΕΙΟ. Με την πιστοποίηση του αποκτά πρόσβαση στο περιβάλλον του ιατρού που παρέχει η εφαρμογή.

ΜΙΚΡΟΟΙΚΟΝΟΜΙΚΗ Η ΚΑΤΑΝΑΛΩΤΙΚΗ ΑΠΟΦΑΣΗ. Άσκηση με θέμα τη μεγιστοποίηση της χρησιμότητας του καταναλωτή

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

Κατασκευή της κίνησης Brown και απλές ιδιότητες

- 1 - Ποιοι κερδίζουν από το εμπόριο αγαθών και υπηρεσιών; Γιατί η άμεση ανταλλαγή αγαθών, ορισμένες φορές, είναι δύσκολο να

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Τρίτη Γραπτή Εργασία στη Στατιστική

POINTERS, AGGREGATION, COMPOSITION

Οντοκεντρικός Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

17 Μαρτίου 2013, Βόλος

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Μούλου Ευγενία

Αναγνώριση Προτύπων 1

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

Aντικειμενοστραφής. Προγραμματισμός. Κληρονομικότητα

Ας υποθέσουμε ότι ο παίκτης Ι διαλέγει πρώτος την τυχαιοποιημένη στρατηγική (x 1, x 2 ), x 1, x2 0,

Μεταφραστής (Compiler)

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

Τρίτη, 05 Ιουνίου 2001 ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ Γ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΗΥ-150. Προγραμματισμός

Αλγόριθμοι & Βελτιστοποίηση

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Ελένη Τουσίδου, Ph.D.

ΜΑΘΗΜΑ: ΕΜΠΟΡΙΚΟ ΔΙΚΑΙΟ

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos

Martingales. 3.1 Ορισμός και παραδείγματα

ΗΥ-150. Πίνακες (Arrays)

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language)

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Εξαναγκασμένες ταλαντώσεις, Ιδιοτιμές με πολλαπλότητα, Εκθετικά πινάκων. 9 Απριλίου 2013, Βόλος

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Δυναμική μνήμη με πίνακες και λίστες

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

τεσσάρων βάσεων δεδομένων που θα αντιστοιχούν στους συνδρομητές

Μεταγλωττιστές ΙΙ. Καταμερισμός καταχωρητών. Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

Το κράτος είναι φτιαγμένο για τον άνθρωπο και όχι ο άνθρωπος για το κράτος. A. Einstein Πηγή:

Transcript:

Pointers 1 Σημερινό Μάθημα! Χρήση pointer Τελεστής * Τελεστής & Γενικοί δείκτες Ανάκληση Δέσμευση μνήμης new / delete Pointer σε αντικείμενο 2 1

Μνήμη μεταβλητών Κάθε μεταβλητή έχει διεύθυνση Δεν χρειάζεται να γνωρίζουμε τον αριθμό της διεύθυνσης αλλά πολλές φορές χρειάζεται να πούμε στο compiler πόση μνήμη θα χρειαστεί. Π.χ. ένας long integer χρειάζεται 4 bytes Ακόμα και αν δεν γνωρίζουμε τη διεύθυνση μπορούμε να την αποθηκεύσουμε σε ένα pointer 3 Χρήση pointer int *page = 0; Ο page είναι δείκτης σε ακέραιο δηλαδή θα έχει τη διεύθυνση μιας θέσης μνήμης αρκέτά μεγάλης για να αποθηκεύσει ακέραιο. Όταν η διεύθυνση ενός δείκτη είναι 0 κατά σύμβαση ο δείκτης είναι null. Καλό είναι οι δείκτες να αρχικοποιούνται κατά τη δήλωση τους: unsigned short int howold = 50; unsigned short int * page = &howold; Ο δείκτης παρέχει έμμεση πρόσβαση στη μεταβλητή, της οποίας τη διεύθυνση περιέχει: unsigned short int yourage; yourage = *page; 4 2

Δείκτες (Pointers) int foo; int *x; Address MEMORY 0 1 2 foo 3 123 4 5 81345 81346 81347... foo = 123; x = &foo; x 3... 5 Τελεστής * Ο τελεστής * έχει δύο χρήσεις: unsigned short * page = 0; *page = 5; 6 3

Τελεστής & Για να πάρουμε τη διεύθυνση μιας μεταβλητής χρησιμοποιούμε μ τον τελεστή & int a = 3, *ptr=0; ptr = &a; cout << ʺThe address of variable a is ʺ << (int)ptr << ʺ and it contains ʺ << *ptr << endl; Ο τύπος του δείκτη ορίζει το πλήθος των bytes που απαιτεί η μεταβλητή ΌΧΙ ο δείκτης. 7 Pointer διεύθυνση τιμή μεταβλητής int thevariable = 5; int t* ppointer = &thevariable ; 8 4

Παράδειγμα #include <iostream.h>: typedef unsigned short int USHORT; int main() USHORT myage; // a variable USHORT * page = 0; // a pointer myage = 5; cout << ʺmyAge: ʺ << myage << ʺ\nʺ; page = &myage; cout << ʺ*pAge: ʺ << *page << ʺ\n\nʺ; cout << ʺ*pAge = 7\nʺ; *page = 7; cout << ʺ*pAge: ʺ << *page << ʺ\nʺ; cout << ʺmyAge: ʺ << myage << ʺ\n\nʺ; cout << ʺmyAge = 9\nʺ; myage = 9; cout << ʺmyAge: ʺ << myage << ʺ\nʺ; cout << ʺ*pAge: ʺ << *page << ʺ\nʺ; return 0; } myage: 5 *page: 5 *page = 7 *page: 7 myage: 7 myage = 9 myage: 9 *page: 9 9 Γενικοί δείκτες: void* Δήλωση: void * ptr; Μπορεί να δείξει σε οποιοδήποτε τύπο void * ptr = GetAddress(); float *fptr = (float*)ptr; Οι συναρτήσεις μπορούν να λάβουν και να επιστρέψουν δείκτες void ΟΛΟΙ οι δείκτες έχουν το ίδιο μέγεθος μγ 10 5

Ανάκληση Μπορεί να χρησιμοποιηθεί δείκτης που δείχνει σε δείκτη Λέγεται Ανάκληση char **ccptr; // pointer to char pointer 11 Ανάκληση 12 6

Ανάκληση int *x; x int int **y; y *int int double *z; z double 13 Χρησιμότητα pointer Διαχείριση δεδομένων & μνήμης (δέσμευση μνήμης) ) Πρόσβαση στα δεδομένα μέλη κλάσεων και συναρτήσεων Πέρασμα με αναφορά σε συναρτήσεις 14 7

Δέσμευση μνήμης Για να διαχειριστούμε σωστά τα δεδομένα και να δεσμεύσουμε μνήμη όπου χρειάζεται χρησιμοποιούμε την εντολή new: unsigned short int * ppointer; ppointer = new unsigned short int; Ή unsigned short int * ppointer = new unsigned short int; Το new ακολουθείται από τον τύπο του αντικειμένου που θέλουμε να δεσμεύσουμε Η διεύθυνση αποδίδεται σε ένα δείκτη Κάθε φορά που αιτούμαστε για μνήμη πρέπει να ελέγχουμε το δείκτη για null (αποτυχία στη δέσμευση) 15 delete Όταν δεν μας χρειάζεται η δεσμευμένη μνήμη την απελευθερώνουμε με delete: delete ppointer; Αν ξανακαλέσουμε το delete στον ίδιο δείκτη μπορεί να προκαλέσει crash Για τον ίδιο λόγο καλό είναι μετά το delete να αποδίδουμε στο δείκτη τιμή 0(null) Crash hθα προκαλέσει και η προσπάθεια να αποδώσουμε εκ νέου μνήμη σε διαγραμμένο δείκτη. ΠΡΟΣΟΧΗ: το σωστό είναι για κάθε new να υπάρχει ένα delete 16 8

Παράδειγμα/1 #include <iostream.h> localvariable: 5 int main() *plocal: 5 int localvariable = 5; int * plocal= &localvariable; int * pheap = new int; if (pheap == NULL) cout << ʺError! E No memory for pheap!!ʺ; return 0; } *pheap = 7; cout << ʺlocalVariable: ʺ << localvariable << ʺ\nʺ; cout << ʺ*pLocal: ʺ << *plocal << ʺ\nʺ; 17 Παράδειγμα/2 } cout << ʺ*pHeap: ʺ << *pheap << ʺ\nʺ; delete pheap; pheap = new int; if (pheap == NULL) cout << ʺError! No memory for pheap!!ʺ; return 0; } *pheap = 9; cout << ʺ*pHeap: ʺ << *pheap << ʺ\nʺ; delete pheap; return 0; localvariable: 5 *plocal: 5 *pheap: 7 *pheap: 9 18 9

Pointer σε αντικείμενο Cat *pcat = new Cat; Γίνεται δέσμευση για όσο χώρο απαιτεί η συγκεκριμένη κλάση 19 Παράδειγμα/1 #include <iostream.h> class SimpleCat public: SimpleCat(); ~SimpleCat(); private: int itsage; }; SimpleCat::SimpleCat() cout << ʺConstructor called.\nʺ; itsage = 1; } 20 10

} SimpleCat Frisky... Constructor called. SimpleCat *prags = new SimpleCat.. Παράδειγμα/2 Constructor called. delete prags... SimpleCat::~SimpleCat() Destructor called. Exiting, watch Frisky go... cout << ʺDestructor t t called.\nʺ; ʺ Destructor t called. } int main() cout << ʺSimpleCat Frisky...\nʺ; SimpleCat Frisky; cout << ʺSimpleCat *prags = new SimpleCat...\nʺ; SimpleCat * prags = new SimpleCat; cout << ʺdelete prags...\nʺ; delete prags; cout << ʺExiting, watch Frisky go...\nʺ; return 0; 21 11