Μία μεταβλητή τύπου αναφοράς αποτελεί ένα αμετάβλητο δείκτη σε μία υφιστάμενη μεταβλητή. Οι βασικές διαφορές ανάμεσα στις αναφορές και τους δείκτες είναι οι εξής:
Δείτε τα παρακάτω παραδείγματα ορισμού και χρήσης αναφορών
#include <iostream> using namespace std; int main () { // declare simple variables int i; double d; // declare reference variables int& r = i; double& s = d; 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; return 0; }
Οι αναφορές μπορούν να χρησιμοποιηθούν ως παράμετροι σε συναρτήσεις σε αναλογία με τους δείκτες. Η χρήση αναφορών συνεπάγεται ότι μετά την έξοδο από τη καλούμενη συνάρτηση το περιεχόμενο των παραμέτρων που έχουν δημιουργηθεί ως αναφορές μπορεί να έχει αλλάξει. Δείτε το παρακάτω παράδειγμα, χρήση της συνάρτησης swap η οποία λαμβάνει ως ορίσματα δύο αναφορές τύπου int.
#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; }
Όταν μία συνάρτηση επιστρέφει μία αναφορά τότε η επιστρεφόμενη τιμής μπορεί να χρησιμοποιηθεί
Δείτε το παρακάτω τμήμα κώδικα, όπου η συνάρτηση array_value χρησιμοποιείται για να αναθέσει τιμές σε στοιχεία του πίνακα vals.
#include <iostream> using namespace std; double& array_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 << "Array before change" << endl; for ( int i = 0; i < 5; i++ ) { cout << "vals[" << i << "] = "; cout << vals[i] << endl; } array_value(vals, 1) = 20.23; // αλλαγή του 2ου στοιχείου array_value(vals, 3) = 70.8; // αλλαγή του 4ου στοιχείου cout << "Array after change" << endl; for ( int i = 0; i < 5; i++ ) { cout << "vals[" << i << "] = "; cout << vals[i] << endl; } return 0; }