This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
cpp:references [2017/03/16 15:05] gthanos [Αναφορές ως παράμετροι συναρτήσεων] |
cpp:references [2021/04/27 06:36] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Αναφορές (References) ====== | ||
| - | |||
| - | Μία μεταβλητή τύπου αναφοράς αποτελεί ένα αμετάβλητο δείκτη σε μία υφιστάμενη μεταβλητή. Οι βασικές διαφορές ανάμεσα στις αναφορές και τους δείκτες είναι οι εξής: | ||
| - | * Κατά την δήλωση μίας αναφοράς είναι υποχρεωτική και η αρχικοποίηση της. Οι δείκτες μπορούν να αρχικοποιηθούν σε οποιοδήποτε σημείου του προγράμματος. | ||
| - | * Η διεύθυνση στην οποία δείχνει μία αναφορά δεν μπορεί να είναι NULL. Το περιεχόμενο όμως της διεύθυνση μπορεί να πάρει οποιαδήποτε τιμή (συμπεριλαμβανομένης της τιμής NULL). | ||
| - | * Η αναφορά μπορεί να μεταβάλλει το περιεχόμενο της διεύθυνσης στην οποία δείχνει, | ||
| - | * Η πρόσβαση στο περιεχόμενο μιας αναφοράς γίνεται απευθείας με χρήση του ονόματος της αναφοράς, | ||
| - | |||
| - | Δείτε τα παρακάτω παραδείγματα ορισμού και χρήσης αναφορών | ||
| - | |||
| - | <code c reference_intro.cpp> | ||
| - | #include < | ||
| - | |||
| - | using namespace std; | ||
| - | |||
| - | int main () { | ||
| - | // declare simple variables | ||
| - | | ||
| - | | ||
| - | |||
| - | // declare reference variables | ||
| - | | ||
| - | | ||
| - | |||
| - | i = 5; | ||
| - | cout << "Value of i : " << i << endl; | ||
| - | cout << "Value of i reference : " << r << endl; | ||
| - | |||
| - | d = 11.7; | ||
| - | cout << "Value of d : " << d << endl; | ||
| - | cout << "Value of d reference : " << s << endl; | ||
| - | |||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Αναφορές ως παράμετροι συναρτήσεων ===== | ||
| - | |||
| - | Οι αναφορές μπορούν να χρησιμοποιηθούν ως παράμετροι σε συναρτήσεις σε αναλογία με τους δείκτες. Η χρήση αναφορών συνεπάγεται ότι μετά την έξοδο από τη καλούμενη συνάρτηση το περιεχόμενο των παραμέτρων που έχουν δημιουργηθεί ως αναφορές μπορεί να έχει αλλάξει. Δείτε το παρακάτω παράδειγμα, | ||
| - | |||
| - | <code c reference_function_params.cpp> | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | void swap(int& | ||
| - | int temp; | ||
| - | temp = x; /* save the value at address x */ | ||
| - | x = y; /* put y into x */ | ||
| - | y = temp; /* put x into y */ | ||
| - | | ||
| - | | ||
| - | } | ||
| - | |||
| - | int main () { | ||
| - | // local variable declaration: | ||
| - | int a = 100; | ||
| - | int b = 200; | ||
| - | |||
| - | cout << " | ||
| - | cout << " | ||
| - | |||
| - | /* calling a function to swap the values.*/ | ||
| - | | ||
| - | |||
| - | cout << "After swap, value of a :" << a << endl; | ||
| - | cout << "After swap, value of b :" << b << endl; | ||
| - | |||
| - | | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== Αναφορές ως επιστρεφόμενες τιμές σε συναρτήσεις ===== | ||
| - | |||
| - | Όταν μία συνάρτηση επιστρέφει μία αναφορά τότε η επιστρεφόμενη τιμής της μπορεί να χρησιμοποιηθεί τόσο για διάβασμα του περιεχομένου τους σχετικής διεύθυνσης όσο και για γράψιμο αυτού. Δείτε το παρακάτω τμήμα κώδικα, | ||
| - | |||
| - | <code c reference_return_values.cpp> | ||
| - | #include < | ||
| - | #include < | ||
| - | |||
| - | using namespace std; | ||
| - | |||
| - | double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0}; | ||
| - | |||
| - | double& setValues( int i ) { | ||
| - | | ||
| - | } | ||
| - | |||
| - | // main function to call above defined function. | ||
| - | int main () { | ||
| - | |||
| - | cout << "Value before change" | ||
| - | for ( int i = 0; i < 5; i++ ) { | ||
| - | cout << " | ||
| - | cout << vals[i] << endl; | ||
| - | } | ||
| - | |||
| - | | ||
| - | | ||
| - | |||
| - | cout << "Value after change" | ||
| - | for ( int i = 0; i < 5; i++ ) { | ||
| - | cout << " | ||
| - | cout << vals[i] << endl; | ||
| - | } | ||
| - | |||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||