cpp:references

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
cpp:references [2017/03/16 14:53]
gthanos created
cpp:references [2019/04/12 09:52]
gthanos [Αναφορές ως επιστρεφόμενες τιμές σε συναρτήσεις]
Line 2: Line 2:
  
 Μία μεταβλητή τύπου αναφοράς αποτελεί ένα αμετάβλητο δείκτη σε μία υφιστάμενη μεταβλητή. Οι βασικές διαφορές ανάμεσα στις αναφορές και τους δείκτες είναι οι εξής: Μία μεταβλητή τύπου αναφοράς αποτελεί ένα αμετάβλητο δείκτη σε μία υφιστάμενη μεταβλητή. Οι βασικές διαφορές ανάμεσα στις αναφορές και τους δείκτες είναι οι εξής:
-  * Κατά την δήλωση μίας αναφοράς είναι υποχρεωτική και η αρχικοποίηση της. Οι δείκτες μπορούν να αρχικοποιηθούν σε οποιοδήποτε σημείου του προγράμματος. +  * Κατά την δήλωση μίας αναφοράς είναι υποχρεωτική και η αρχικοποίηση της. Οι δείκτες μπορούν να αρχικοποιηθούν σε οποιοδήποτε σημείου του προγράμματος (εκτός εάν είναι αμετάβλητης διεύθυνσης)
-  * Η διεύθυνσ στην οποία δείχνει μία αναφορά δεν μπορεί να είναι NULL. Το περιεχόμενο της μπορεί να είναι ΝULL.+  * Η διεύθυνση στην οποία δείχνει μία αναφορά δεν μπορεί να είναι NULL. Το περιεχόμενο όμως της διεύθυνσης μπορεί να πάρει οποιαδήποτε τιμή (συμπεριλαμβανομένης της τιμής NULL).
   * Η αναφορά μπορεί να μεταβάλλει το περιεχόμενο της διεύθυνσης στην οποία δείχνει, δεν μπορεί όμως να μεταβάλλει την τιμή της διεύθυνσης στην οποία έχει αρχικοποιηθεί.   * Η αναφορά μπορεί να μεταβάλλει το περιεχόμενο της διεύθυνσης στην οποία δείχνει, δεν μπορεί όμως να μεταβάλλει την τιμή της διεύθυνσης στην οποία έχει αρχικοποιηθεί.
   * Η πρόσβαση στο περιεχόμενο μιας αναφοράς γίνεται απευθείας με χρήση του ονόματος της αναφοράς, με τον ίδιο ακριβώς τρόπο που προσπελάυνεται το περιεχόμενο μίας μεταβλητής.   * Η πρόσβαση στο περιεχόμενο μιας αναφοράς γίνεται απευθείας με χρήση του ονόματος της αναφοράς, με τον ίδιο ακριβώς τρόπο που προσπελάυνεται το περιεχόμενο μίας μεταβλητής.
Line 34: Line 34:
 } }
 </code> </code>
 +
 +===== Αναφορές ως παράμετροι συναρτήσεων =====
 +
 +Οι αναφορές μπορούν να χρησιμοποιηθούν ως παράμετροι σε συναρτήσεις σε αναλογία με τους δείκτες. Η χρήση αναφορών συνεπάγεται ότι μετά την έξοδο από τη καλούμενη συνάρτηση το περιεχόμενο των παραμέτρων που έχουν δημιουργηθεί ως αναφορές μπορεί να έχει αλλάξει. Δείτε το παρακάτω παράδειγμα, χρήση της συνάρτησης swap η οποία λαμβάνει ως ορίσματα δύο αναφορές τύπου //int//.
 +
 +<code c reference_function_params.cpp>
 +#include <iostream>
 +using namespace std;
 + 
 +void swap(int& x, int& y) {
 +   int temp;
 +   temp = x; /* save the value at address x */
 +   x = y;    /* put y into x */
 +   y = temp; /* put x into y */
 +  
 +   return;
 +}
 + 
 +int main () {
 +   // local variable declaration:
 +   int a = 100;
 +   int b = 200;
 + 
 +   cout << "Before swap, value of a :" << a << endl;
 +   cout << "Before swap, value of b :" << b << endl;
 + 
 +   /* calling a function to swap the values.*/
 +   swap(a, b);
 + 
 +   cout << "After swap, value of a :" << a << endl;
 +   cout << "After swap, value of b :" << b << endl;
 + 
 +   return 0;
 +}
 + 
 +</code>
 +
 +===== Αναφορές ως επιστρεφόμενες τιμές σε συναρτήσεις =====
 +
 +Όταν μία συνάρτηση επιστρέφει μία αναφορά τότε η επιστρεφόμενη τιμής της μπορεί να χρησιμοποιηθεί τόσο για διάβασμα του περιεχομένου της σχετικής διεύθυνσης όσο και για γράψιμο αυτού. Δείτε το παρακάτω τμήμα κώδικα, όπου η συνάρτηση //value// χρησιμοποιείται για να αναθέσει τιμές σε στοιχεία του πίνακα //vals//.
 +
 +<code cpp reference_return_values.cpp>
 +#include <iostream> 
 +using namespace std;
 + 
 +double& value(double array[], int i ) {
 +   return array[i];   // return a reference to the ith element
 +}
 + 
 +int main () {
 +  
 +  double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
 + 
 +   cout << "Value before change" << endl;
 +   for ( int i = 0; i < 5; i++ ) {
 +      cout << "vals[" << i << "] = ";
 +      cout << vals[i] << endl;
 +   }
 + 
 +   value(vals, 1) = 20.23; // change 2nd element
 +   value(vals, 3) = 70.8;  // change 4th element
 + 
 +   cout << "Value after change" << endl;
 +   for ( int i = 0; i < 5; i++ ) {
 +      cout << "vals[" << i << "] = ";
 +      cout << vals[i] << endl;
 +   }
 +
 +   return 0;
 +}
 +</code>
 +
 +
  
  
cpp/references.txt · Last modified: 2021/04/27 06:36 (external edit)