Σε αυτό το σεμινάριο, θα μάθουμε για την κλήση C ++ με αναφορά στους δείκτες διέλευσης ως επιχείρημα στη συνάρτηση με τη βοήθεια παραδειγμάτων.
Στο σεμινάριο C ++ Functions, μάθαμε για τη μετάδοση ορισμάτων σε μια συνάρτηση. Αυτή η μέθοδος που χρησιμοποιείται ονομάζεται pass by by value επειδή η πραγματική τιμή έχει περάσει.
Ωστόσο, υπάρχει ένας άλλος τρόπος μετάδοσης ορισμάτων σε μια συνάρτηση όπου οι πραγματικές τιμές των ορισμάτων δεν μεταβιβάζονται. Αντίθετα, μεταφέρεται η αναφορά στις τιμές.
Για παράδειγμα,
// function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )
Παρατηρήστε το &
στο void func2(int &numRef)
. Αυτό σημαίνει ότι χρησιμοποιούμε τη διεύθυνση της μεταβλητής ως παράμετρος μας.
Έτσι, όταν καλούμε τη func2()
συνάρτηση main()
περνώντας τη μεταβλητή num ως όρισμα, μεταβιβάζουμε πραγματικά τη διεύθυνση της num μεταβλητής αντί της τιμής 5 .

Παράδειγμα 1: Μετάβαση με αναφορά χωρίς δείκτες
#include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )
Παραγωγή
Πριν από την εναλλαγή a = 1 b = 2 Μετά την ανταλλαγή a = 2 b = 1
Σε αυτό το πρόγραμμα, περάσαμε τις μεταβλητές a και b στη swap()
συνάρτηση. Παρατηρήστε τον ορισμό της συνάρτησης,
void swap(int &n1, int &n2)
Εδώ, χρησιμοποιούμε &
για να υποδηλώσουμε ότι η συνάρτηση θα δεχτεί διευθύνσεις ως παραμέτρους της.
Ως εκ τούτου, ο μεταγλωττιστής μπορεί να αναγνωρίσει ότι αντί των πραγματικών τιμών, η αναφορά των μεταβλητών μεταβιβάζεται στις παραμέτρους λειτουργίας.
Στη swap()
συνάρτηση, οι παράμετροι συνάρτησης n1 και n2 δείχνουν την ίδια τιμή με τις μεταβλητές a και b αντίστοιχα. Ως εκ τούτου, η ανταλλαγή πραγματοποιείται στην πραγματική τιμή.
Η ίδια εργασία μπορεί να γίνει χρησιμοποιώντας τους δείκτες. Για να μάθετε σχετικά με τους δείκτες, επισκεφτείτε το C ++ Pointers.
Παράδειγμα 2: Περάζοντας με αναφορά χρησιμοποιώντας δείκτες
#include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )
Παραγωγή
Πριν από την εναλλαγή a = 1 b = 2 Μετά την ανταλλαγή a = 2 b = 1
Εδώ, μπορούμε να δούμε ότι η έξοδος είναι ίδια με το προηγούμενο παράδειγμα. Παρατηρήστε τη γραμμή,
// &a is address of a // &b is address of b swap(&a, &b);
Εδώ, η διεύθυνση της μεταβλητής περνά κατά τη διάρκεια της κλήσης συνάρτησης και όχι της μεταβλητής.
Δεδομένου ότι η διεύθυνση μεταβιβάζεται αντί της τιμής, *
πρέπει να χρησιμοποιηθεί ένας τελεστής διαγραφής για την πρόσβαση στην τιμή που είναι αποθηκευμένη σε αυτήν τη διεύθυνση.
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
και *n2
δίνει την τιμή που είναι αποθηκευμένη στη διεύθυνση n1 και n2 αντίστοιχα.
Δεδομένου ότι τα n1 και n2 περιέχουν τις διευθύνσεις των a και b, οτιδήποτε γίνεται *n1
και το * n2 θα αλλάξει τις πραγματικές τιμές των a και b.
Ως εκ τούτου, όταν εκτυπώνουμε τις τιμές των a και b στη main()
συνάρτηση, οι τιμές αλλάζουν.