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

8
Αντικειμενοστραφής Προγραμματισμός Δείκτες (Pointers)

Upload: marny-mcfarland

Post on 03-Jan-2016

23 views

Category:

Documents


6 download

DESCRIPTION

Αντικειμενοστραφής Προγραμματισμός. Δείκτες (Pointers). Δείκτες. Δείκτης (pointer) είναι μία μεταβλητή που περιέχει ως τιμή τη διεύθυνση μιας μεταβλητής Δήλωση μιας μεταβλητής τύπου δείκτη: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Αντικειμενοστραφής Προγραμματισμός

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

Δείκτες (Pointers)

Page 2: Αντικειμενοστραφής Προγραμματισμός

Δείκτες

• Δείκτης (pointer) είναι μία μεταβλητή που περιέχει ως τιμή τη διεύθυνση μιας μεταβλητής

• Δήλωση μιας μεταβλητής τύπου δείκτη:όπως ισχύει και για οποιαδήποτε άλλη μεταβλητή, ένας δείκτης πρέπει πρώτα να δηλωθεί προτού μπορέσει να χρησιμοποιηθεί

Η δήλωση:

int *ptr;

δηλώνει μία μεταβλητή τύπου δείκτη

με όνομα ptr

η οποία μπορεί να λάβει ως τιμή τις διευθύνσεις μεταβλητών τύπου int

• ένας δείκτης ο οποίος έχει ως τιμή τη διεύθυνση μιας μεταβλητής x, θεωρείται ότι ‘’δείχνει’’ προς τη μεταβλητή x

Page 3: Αντικειμενοστραφής Προγραμματισμός

Κανονικές Μεταβλητές

int main()

{

int x;

x = 5;

return 0;

}

main

x

int

5

όνομα μεταβλητής

τύπος δεδομένων

τιμή μεταβλητής

FFAFE5

διεύθυνση μεταβλητής

Page 4: Αντικειμενοστραφής Προγραμματισμός

Τελεστές που σχετίζονται με δείκτες

• Μοναδιαίος Τελεστής & (τελεστής διεύθυνσης)

• εφαρμοζόμενος σε οποιαδήποτε μεταβλητή (ή αντικείμενο), επιστρέφει τη διεύθυνση της μεταβλητής (ή του αντικειμένου)

• Μοναδιαίος Τελεστής * (έμμεσης αναφοράς)

• εφαρμοζόμενος σε μεταβλητές τύπου δείκτη, επιστρέφει το περιεχόμενο της μνήμης προς την οποία ‘’δείχνει’’ ο δείκτης

Page 5: Αντικειμενοστραφής Προγραμματισμός

Κανονικές Μεταβλητές και Δείκτες

int main()

{

int x;

int *ptr;

x = 5;

ptr = &x;

return 0;

}

main

x

int

5FFAFE5

ptr

int*

FFAFE5

//o ptr δείχνει στην x

Page 6: Αντικειμενοστραφής Προγραμματισμός

Δείκτες

• Αν ένας δείκτης ‘’δείχνει’’ προς μία μεταβλητή, μπορεί να χρησιμοποιηθεί για την έμμεση προσπέλαση της μεταβλητής

int main()

{

int x;

x = 5;

}

int *ptr;

ptr = &x;

η έκφραση x = x + 1;είναι ισοδύναμη με την *ptr = *ptr + 1

Για την εκτύπωση της x, οι εντολές

cout << x;

cout << *ptr;

είναι ισοδύναμες

Page 7: Αντικειμενοστραφής Προγραμματισμός

Κλήση συναρτήσεων κατ’ αξία (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

Page 8: Αντικειμενοστραφής Προγραμματισμός

Κλήση συναρτήσεων κατ’ αναφορά (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