80 likes | 168 Views
Αντικειμενοστραφής Προγραμματισμός. Δείκτες (Pointers). Δείκτες. Δείκτης (pointer) είναι μία μεταβλητή που περιέχει ως τιμή τη διεύθυνση μιας μεταβλητής Δήλωση μιας μεταβλητής τύπου δείκτη:
E N D
Αντικειμενοστραφής Προγραμματισμός Δείκτες (Pointers)
Δείκτες • Δείκτης(pointer) είναι μία μεταβλητή που περιέχει ως τιμή τη διεύθυνση μιας μεταβλητής • Δήλωση μιας μεταβλητής τύπου δείκτη: • όπως ισχύει και για οποιαδήποτε άλλη μεταβλητή, ένας δείκτης πρέπει πρώτα να δηλωθεί προτού μπορέσει να χρησιμοποιηθεί • Η δήλωση: • int *ptr; • δηλώνει μία μεταβλητή τύπου δείκτη • με όνομα ptr • η οποία μπορεί να λάβει ως τιμή τις διευθύνσεις μεταβλητών τύπου int • ένας δείκτης ο οποίος έχει ως τιμή τη διεύθυνση μιας μεταβλητής x, θεωρείται ότι ‘’δείχνει’’ προς τη μεταβλητή x
τύπος δεδομένων διεύθυνση μεταβλητής όνομα μεταβλητής τιμή μεταβλητής Κανονικές Μεταβλητές main int main() { int x; x = 5; return 0; } int FFAFE5 5 x
Τελεστές που σχετίζονται με δείκτες • Μοναδιαίος Τελεστής & (τελεστής διεύθυνσης) • εφαρμοζόμενος σε οποιαδήποτε μεταβλητή (ή αντικείμενο), επιστρέφει τη διεύθυνση της μεταβλητής (ή του αντικειμένου) • Μοναδιαίος Τελεστής * (έμμεσης αναφοράς) • εφαρμοζόμενος σε μεταβλητές τύπου δείκτη, επιστρέφει το περιεχόμενο της μνήμηςπρος την οποία ‘’δείχνει’’ ο δείκτης
//o ptr δείχνει στην x Κανονικές Μεταβλητές και Δείκτες main int main() { int x; int *ptr; x = 5; ptr = &x; return 0; } int int* FFAFE5 5 FFAFE5 x ptr
int *ptr; ptr = &x; Δείκτες • Αν ένας δείκτης ‘’δείχνει’’ προς μία μεταβλητή, μπορεί να χρησιμοποιηθεί για την έμμεση προσπέλαση της μεταβλητής int main() { int x; x = 5; } Για την εκτύπωση της x, οι εντολές cout << x; cout << *ptr; είναι ισοδύναμες η έκφραση x = x + 1; είναι ισοδύναμη με την *ptr = *ptr + 1
main στοίβα της main 5 x setToZero στοίβα της setToZero var Κλήση συναρτήσεων κατ’ αξία (call by value) #include <iostream> using namespace std; void setToZero(int var); int main( ) { int x; x = 5; setToZero(x); cout << x << endl; return 0; } void setToZero(int var) { var = 0; } Η τιμή της μεταβλητής x στη συνάρτηση main δεν αλλάζει μετά την κλήση της setToZero Η τιμή του ορίσματος κατά την κλήση της συνάρτησης αντιγράφεται στην αντίστοιχη παράμετρο της setToZero 0
main στοίβα της main 0 5 x setToZero στοίβα της setToZero &x *var Κλήση συναρτήσεων κατ’ αναφορά (call by reference) #include <iostream> using namespace std; void setToZero(int *var); int main( ) { int x; x = 5; setToZero(&x); cout << x << endl; return 0; } void setToZero(int *var) { *var = 0; } Αυτό που περνά ως παράμετρος είναι η διεύθυνση της μεταβλητής x Η διεύθυνση αντιγράφεται στον αντίστοιχο δείκτη της setToZero ο οποίος προσπελαύνει την αρχική μεταβλητή