Προγραμματισμός H/Y Ενότητα 4: Δείκτες Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί Ενότητας Κατανόηση της έννοιας του δείκτη στην γλώσσα C και δυνατότητα χρήσης δεικτών σε πρόγραμμα. 4
Περιεχόμενα Δείκτες (pointers). Δήλωση δείκτη. Ο τελεστής & και *. Δυναμική δέσμευση και αποδέσμευση μνήμης - πλεονεκτήματα, με τις συναρτήσεις malloc και free. Ο τελεστής sizeof. 5
Δείκτες (pointers) Οι μεταβλητές είναι θέσεις στην μνήμη RAM του υπολογιστή. Η μνήμη RAM αποτελείται από μια σειρά bytes. Τα bytes είναι αριθμημένα, ξεκινώντας από το 0 και φτάνοντας μέχρι το μέγεθος της RAM στον συγκεκριμένο υπολογιστή. Ο αύξων αριθμός του κάθε byte ονομάζεται διεύθυνσή του στην μνήμη. Είναι δυνατή η προσπέλαση των θέσεων μνήμης στην RAM μέσω δεικτών. 6
Δήλωση δείκτη (1) Ένας δείκτης περιέχει μια διεύθυνση της μνήμης. Στην ουσία είναι ένα είδος μεταβλητής, αλλά αντί για τα συνηθισμένα δεδομένα περιέχει μια διεύθυνση. Εφόσον περιέχει μια διεύθυνση, λέμε ότι δείχνει σε κάποια θέση της μνήμης και επομένως σε κάποιο δεδομένο στην μνήμη. Ένας δείκτης έχει τύπο ίδιο με εκείνον του δεδομένου στο οποίο δείχνει. 7
Δήλωση δείκτη (2) Δηλώνουμε έναν δείκτη όπως και μια μεταβλητή, αλλά πριν το όνομά του βάζουμε έναν αστερίσκο * Ο τελεστής & και *. Με * δηλώνουμε έναν δείκτη. Με * αναφερόμαστε στο δεδομένο (τιμή) στο οποίο δείχνει ο δείκτης. Ο τελεστής & δίνει τη διεύθυνση μιας μεταβλητής. 8
Δυναμική δέσμευση και αποδέσμευση μνήμης (1) Πλεονεκτήματα, με τις συναρτήσεις malloc και free. Η συνάρτηση malloc() δεσμεύει μια ποσότητα μνήμης (πλήθος byte) και επιστρέφει τη διεύθυνση του 1 ου byte. Αυτή η διεύθυνση πρέπει να αποθηκευθεί σε έναν δείκτη. 9
Δυναμική δέσμευση και αποδέσμευση μνήμης (2) Η συνάρτηση free() αποδεσμεύει την ποσότητα μνήμης που δεσμεύτηκε από την malloc(). Την χρησιμοποιούμε όταν δεν χρειαζόμαστε πλέον τα δεδομένα που αποθηκεύσαμε στο δεσμευμένο τμήμα μνήμης. Ο τελεστής sizeof. Το πλήθος των δεδομένων που καταλαμβάνει ένας τύπος δεδομένων (πχ char, int, float, double) υπολογίζεται από τον τελεστή sizeof(). 10
Βιβλιογραφία Συνδουκάς Δημήτρης 2007, Εισαγωγή στη γλώσσα προγραμματισμού C, Εσωτερική έκδοση του ΤΕΙ Χατζηγιαννάκης Ν. Μ., Η Γλώσσα C σε βάθος (4η έκδοση), Εκδόσεις Κλειδάριθμος, 2012, ISBN: 978-960-461-498-1. Τσελίκης Γ. Σ., Τσελίκας Ν. Δ., C: Aπό τη Θεωρία στην Εφαρμογή, Εκδότης: Νικόλαος Τσελίκας, 2012, ISBN: 978-960-93-1961-4. Schildt H., Οδηγός της C (3η έκδοση), Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2000, ISBN: 978-960-512-228-7. Zhang T., Μάθετε τη C σε 24 Ώρες, Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2000, ISBN: 960-512-233-2. Aitken Jones, Πλήρες Εγχειρίδιο της C, Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2006, ISBN: 978-960-512-491-5. 11
Τέλος Ενότητας
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 13
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 14