Αντικειμενοστραφής Προγραμματισμός
DESCRIPTION
Αντικειμενοστραφής Προγραμματισμός. Δείκτες (Pointers). Δείκτες. Δείκτης (pointer) είναι μία μεταβλητή που περιέχει ως τιμή τη διεύθυνση μιας μεταβλητής Δήλωση μιας μεταβλητής τύπου δείκτη: - PowerPoint PPT PresentationTRANSCRIPT
Αντικειμενοστραφής Προγραμματισμός
Δείκτες (Pointers)
Δείκτες
• Δείκτης (pointer) είναι μία μεταβλητή που περιέχει ως τιμή τη διεύθυνση μιας μεταβλητής
• Δήλωση μιας μεταβλητής τύπου δείκτη:όπως ισχύει και για οποιαδήποτε άλλη μεταβλητή, ένας δείκτης πρέπει πρώτα να δηλωθεί προτού μπορέσει να χρησιμοποιηθεί
Η δήλωση:
int *ptr;
δηλώνει μία μεταβλητή τύπου δείκτη
με όνομα ptr
η οποία μπορεί να λάβει ως τιμή τις διευθύνσεις μεταβλητών τύπου int
• ένας δείκτης ο οποίος έχει ως τιμή τη διεύθυνση μιας μεταβλητής x, θεωρείται ότι ‘’δείχνει’’ προς τη μεταβλητή x
Κανονικές Μεταβλητές
int main()
{
int x;
x = 5;
return 0;
}
main
x
int
5
όνομα μεταβλητής
τύπος δεδομένων
τιμή μεταβλητής
FFAFE5
διεύθυνση μεταβλητής
Τελεστές που σχετίζονται με δείκτες
• Μοναδιαίος Τελεστής & (τελεστής διεύθυνσης)
• εφαρμοζόμενος σε οποιαδήποτε μεταβλητή (ή αντικείμενο), επιστρέφει τη διεύθυνση της μεταβλητής (ή του αντικειμένου)
• Μοναδιαίος Τελεστής * (έμμεσης αναφοράς)
• εφαρμοζόμενος σε μεταβλητές τύπου δείκτη, επιστρέφει το περιεχόμενο της μνήμης προς την οποία ‘’δείχνει’’ ο δείκτης
Κανονικές Μεταβλητές και Δείκτες
int main()
{
int x;
int *ptr;
x = 5;
ptr = &x;
return 0;
}
main
x
int
5FFAFE5
ptr
int*
FFAFE5
//o ptr δείχνει στην x
Δείκτες
• Αν ένας δείκτης ‘’δείχνει’’ προς μία μεταβλητή, μπορεί να χρησιμοποιηθεί για την έμμεση προσπέλαση της μεταβλητής
int main()
{
int x;
x = 5;
}
int *ptr;
ptr = &x;
η έκφραση x = x + 1;είναι ισοδύναμη με την *ptr = *ptr + 1
Για την εκτύπωση της x, οι εντολές
cout << x;
cout << *ptr;
είναι ισοδύναμες
Κλήση συναρτήσεων κατ’ αξία (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
main
x
5στοίβα της main
setToZero
var
στοίβα της setToZero0
Κλήση συναρτήσεων κατ’ αναφορά (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 ο οποίος προσπελαύνει την αρχική μεταβλητή
main
x
5στοίβα της main
setToZero
*var
στοίβα της setToZero&x
0