Κλήση C ++ κατά διεύθυνση και κλήση με αναφορά

C Call Address



Η C ++ είναι μια ευέλικτη γλώσσα προγραμματισμού γενικής χρήσης. Αρχικά δημιουργήθηκε από Bjarne Stroustrup, ένας Δανός επιστήμονας υπολογιστών, το 1985. Το C ++ υποστηρίζει μεθόδους μετάδοσης τριών παραμέτρων, δηλαδή κλήση ανά τιμή, κλήση ανά διεύθυνση και κλήση με αναφορά. Σε αυτό το άρθρο, θα συζητήσουμε σχετικά με την κλήση ανά διεύθυνση και την κλήση με μηχανισμό αναφοράς.

Τι είναι μια λειτουργία;

Πριν περάσουμε στο πραγματικό θέμα, πρέπει να καταλάβουμε ποια είναι η συνάρτηση στο C ++. Πολλοί από εσάς μπορεί να είστε ήδη εξοικειωμένοι με τις λειτουργίες.







Μια συνάρτηση είναι βασικά ένα κομμάτι κώδικα που μπορεί να χρησιμοποιηθεί για την εκτέλεση μιας συγκεκριμένης εργασίας. Μια συνάρτηση χρησιμοποιείται κυρίως για τη μείωση του επαναλαμβανόμενου κώδικα σε ένα πρόγραμμα C ++. Παίρνει είσοδο ως παραμέτρους και επιστρέφει την έξοδο ως τιμή επιστροφής. Εάν ορίσουμε τη συνάρτηση μία φορά, μπορούμε να την καλέσουμε/χρησιμοποιήσουμε πολλές φορές στο μεταγενέστερο μέρος του προγράμματός μας. Με αυτόν τον τρόπο, αποθηκεύουμε πολλούς επαναλαμβανόμενους κώδικες στο πρόγραμμα.



Κάθε πρόγραμμα C ++ πρέπει να έχει την κύρια () συνάρτηση. Η κύρια () συνάρτηση είναι το σημείο εισόδου για ένα πρόγραμμα C ++. Εκτός από την κύρια () συνάρτηση, ο προγραμματιστής μπορεί να ορίσει όσες συναρτήσεις θέλει.



Εδώ είναι η σύνταξη του ορισμού μιας συνάρτησης:





Return_type Function_Name(Λίστα παραμέτρων εισαγωγής)

Η συνάρτηση σε C ++ μπορεί να δεχτεί 0 ή περισσότερους αριθμούς παραμέτρων εισόδου, ενώ μπορεί να επιστρέψει μόνο μία τιμή επιστροφής.

Τι είναι η διεύθυνση;

Υπάρχουν δύο τύποι μεταβλητών στο C ++ (παρόμοιες με τη γλώσσα C) - Μεταβλητή δεδομένων και Μεταβλητή διεύθυνσης. Η μεταβλητή διεύθυνσης χρησιμοποιείται για την αποθήκευση της διεύθυνσης μιας άλλης μεταβλητής δεδομένων. Για παράδειγμα, ας εξετάσουμε το ακόλουθο απόσπασμα κώδικα:



intΕγώ= 100?
int *ptr= &Εγώ?

Εδώ, η πρώτη πρόταση μας λέει ότι η μεταβλητή i είναι μεταβλητή δεδομένων και αποθηκεύει την τιμή 100. Στη δεύτερη πρόταση, δηλώνουμε μια μεταβλητή δείκτη, δηλαδή ptr, και την αρχικοποιούμε με τη διεύθυνση της μεταβλητής i.

Τι είναι η Αναφορά;

Η αναφορά είναι ένα άλλο ισχυρό χαρακτηριστικό της γλώσσας C ++. Ας εξετάσουμε το ακόλουθο απόσπασμα κώδικα:

intπρος το= 200?
int &ρ=προς το?

Σε αυτό το παράδειγμα, έχουμε δηλώσει έναν ακέραιο, δηλ. A και στη συνέχεια δηλώσαμε μια μεταβλητή αναφοράς r, η οποία αρχικοποιείται με την τιμή a. Έτσι, η μεταβλητή αναφοράς δεν είναι παρά ένα ψευδώνυμο μιας άλλης μεταβλητής.

Μέθοδοι διέλευσης παραμέτρων:

Υπάρχουν τρεις τύποι μεθόδων μετάδοσης παραμέτρων στη γλώσσα C ++:

  1. Κλήση ανά τιμή / Περάστε ανά τιμή
  2. Κλήση κατά διεύθυνση / Περάστε κατά διεύθυνση
  3. Κλήση με αναφορά / Περάστε με αναφορά

Σε αυτό το άρθρο, συζητάμε για το - Κλήση κατά διεύθυνση και Κλήση με αναφορά.

Τι είναι Call By Address / Pass by Address;

Στην περίπτωση της μεθόδου Call by address / Pass by address, τα ορίσματα της συνάρτησης περνούν ως διεύθυνση. Η συνάρτηση καλούντος περνά τη διεύθυνση των παραμέτρων. Οι μεταβλητές δείκτη χρησιμοποιούνται στον ορισμό της συνάρτησης. Με τη βοήθεια της μεθόδου Call by address, η συνάρτηση μπορεί να έχει πρόσβαση στις πραγματικές παραμέτρους και να τις τροποποιήσει. Θα δούμε ένα παράδειγμα της μεθόδου 'Κλήση κατά διεύθυνση' αργότερα αυτού του άρθρου.

Τι είναι το Call By Reference / Pass by reference;

Στη μέθοδο Call by reference / Pass by reference, οι παράμετροι της λειτουργίας περνούν ως αναφορά. Μέσα στον ορισμό της συνάρτησης, οι πραγματικές παράμετροι αποκτούν πρόσβαση χρησιμοποιώντας τη μεταβλητή αναφοράς.

Παραδείγματα:

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

  1. Παράδειγμα-1-Κλήση κατά διεύθυνση (1)
  2. Παράδειγμα-2-Κλήση κατά διεύθυνση (2)
  3. Παράδειγμα-3-Κλήση με αναφορά (1)
  4. Παράδειγμα-4-Κλήση με αναφορά (2)

Τα δύο πρώτα παραδείγματα δίνονται για να εξηγήσουν πώς λειτουργεί η μέθοδος Κλήση κατά διεύθυνση σε C ++. Τα δύο τελευταία παραδείγματα είναι να εξηγήσουν την Πρόσκληση με έννοια αναφοράς.

Παράδειγμα-1-Κλήση κατά διεύθυνση (1)

Σε αυτό το παράδειγμα, θα παρουσιάσουμε την κλήση με μηχανισμό διεύθυνσης. Από τη συνάρτηση main (), καλούμε τη συνάρτηση hello () και περνάμε τη διεύθυνση του var. Στον ορισμό της συνάρτησης, λαμβάνουμε τη διεύθυνση var σε μια μεταβλητή δείκτη, δηλαδή, p. Μέσα στη συνάρτηση hello, η τιμή του var αλλάζει σε 200 με τη βοήθεια του δείκτη. Επομένως, η τιμή του var αλλάζει σε 200 μέσα στην κύρια συνάρτηση () μετά την κλήση της συνάρτησης hello ().

#περιλαμβάνω
χρησιμοποιώντας ονομαστικου χωρουώρες?

κενόςγεια σας(int *Π)
{
κόστος <<endl<< 'Inside hello () συνάρτηση:' <<endl?
κόστος << 'Τιμή *p =' << *Π<<endl?
*Π= 200?
κόστος << 'Τιμή *p =' << *Π<<endl?
κόστος << 'Έξοδος από τη λειτουργία hello ().' <<endl?
}

intκύριος()
{
intόπου= 100?
κόστος << 'Τιμή var μέσα στη συνάρτηση main () =' <<όπου<<endl?

γεια σας(&όπου)?

κόστος <<endl<< 'Τιμή var μέσα στη συνάρτηση main () =' <<όπου<<endl?

ΕΠΙΣΤΡΟΦΗ 0?
}

Παράδειγμα-2-Κλήση κατά διεύθυνση (2)

Αυτό είναι ένα άλλο παράδειγμα της κλήσης με τη μέθοδο της διεύθυνσης. Σε αυτό το παράδειγμα, θα εξηγήσουμε πώς η μέθοδος κλήσης κατά διεύθυνση μπορεί να χρησιμοποιηθεί για την επίλυση ενός πραγματικού προβλήματος. Για παράδειγμα, θέλουμε να γράψουμε μια συνάρτηση για να ανταλλάξουμε δύο μεταβλητές. Εάν χρησιμοποιήσουμε τον μηχανισμό κλήσης ανά τιμή για να ανταλλάξουμε δύο μεταβλητές, οι πραγματικές μεταβλητές δεν αλλάζουν στη συνάρτηση καλούντος. Η μέθοδος κλήσης ανά διεύθυνση μπορεί να χρησιμοποιηθεί σε ένα τέτοιο σενάριο. Σε αυτό το παράδειγμα, περνάμε τη διεύθυνση τόσο της var_1 (& var_1) όσο και της var_2 (& var_2) στη συνάρτηση mySwap (). Μέσα στη συνάρτηση mySwap (), αλλάζουμε τις τιμές αυτών των δύο μεταβλητών με τη βοήθεια των δεικτών. Όπως μπορείτε να δείτε στην παρακάτω έξοδο, η πραγματική τιμή αυτών των μεταβλητών αλλάζει στην κύρια συνάρτηση () μετά την εκτέλεση της συνάρτησης mySwap ().

#περιλαμβάνω
χρησιμοποιώντας ονομαστικου χωρουώρες?

κενόςmySwap(int *vptr_1,int *vptr_2)
{
inttemp_var?
temp_var= *vptr_1?
*vptr_1= *vptr_2?
*vptr_2=temp_var?
}

intκύριος()
{
intvar_1= 100?
intvar_2= 300?

κόστος << 'Πριν καλέσετε τη συνάρτηση mySwap (), τιμή var_1:' <<var_1<<endl?
κόστος << 'Πριν καλέσετε τη συνάρτηση mySwap (), τιμή var_2:' <<var_2<<endl<<endl?

κόστος << 'Κλήση της λειτουργίας mySwap () - Κλήση κατά διεύθυνση.' <<endl<<endl?
mySwap(&var_1,&var_2)?

κόστος << 'Μετά την κλήση της συνάρτησης mySwap (), τιμή var_1:' <<var_1<<endl?
κόστος << 'Μετά την κλήση της συνάρτησης mySwap (), τιμή var_2:' <<var_2<<endl?

ΕΠΙΣΤΡΟΦΗ 0?
}

Παράδειγμα-3-Κλήση με αναφορά (1)

Σε αυτό το παράδειγμα, θα δείξουμε πώς λειτουργεί η κλήση με αναφορά στο C ++. Στον ορισμό της συνάρτησης hello (), η τιμή λαμβάνεται ως μεταβλητή αναφοράς (& p). Με τη βοήθεια της μεταβλητής αναφοράς (δηλαδή, p), μπορούμε να αλλάξουμε την τιμή της πραγματικής παραμέτρου (var) μέσα στη συνάρτηση main ().

#περιλαμβάνω
χρησιμοποιώντας ονομαστικου χωρουώρες?

κενόςγεια σας(int &Π)
{
κόστος <<endl<< 'Inside hello () συνάρτηση:' <<endl?
κόστος << 'Τιμή p =' <<Π<<endl?
Π= 200?
κόστος << 'Τιμή p =' <<Π<<endl?
κόστος << 'Έξοδος από τη λειτουργία hello ().' <<endl?
}

intκύριος()
{
intόπου= 100?
κόστος << 'Τιμή var μέσα στη συνάρτηση main () =' <<όπου<<endl?

γεια σας(όπου)?

κόστος <<endl<< 'Τιμή var μέσα στη συνάρτηση main () =' <<όπου<<endl?

ΕΠΙΣΤΡΟΦΗ 0?
}

Παράδειγμα-4-Κλήση με αναφορά (2)

Αυτό είναι ένα άλλο παράδειγμα κλήσης με αναφορά. Σε αυτό το παράδειγμα, θα δείξουμε πώς λειτουργεί η κλήση μέσω αναφοράς σε C ++ με τη βοήθεια ενός πραγματικού παραδείγματος. Η συνάρτηση mySwap () καλείται από τη συνάρτηση main () με τις ακόλουθες παραμέτρους - var_1 και var_2. Μέσα στη συνάρτηση mySwap (), λαμβάνουμε τις παραμέτρους ως μεταβλητές αναφοράς.

#περιλαμβάνω
χρησιμοποιώντας ονομαστικου χωρουώρες?

κενόςmySwap(int &vref_1,int &vref_2)
{
inttemp_var?
temp_var=vref_1?
vref_1=vref_2?
vref_2=temp_var?
}

intκύριος()
{
intvar_1= 100?
intvar_2= 300?

κόστος << 'Πριν καλέσετε τη συνάρτηση mySwap (), τιμή var_1:' <<var_1<<endl?
κόστος << 'Πριν καλέσετε τη συνάρτηση mySwap (), τιμή var_2:' <<var_2<<endl<<endl?

κόστος << 'Κλήση της λειτουργίας mySwap () - Κλήση με αναφορά.' <<endl<<endl?
mySwap(var_1, var_2)?

κόστος << 'Μετά την κλήση της συνάρτησης mySwap (), τιμή var_1:' <<var_1<<endl?
κόστος << 'Μετά την κλήση της συνάρτησης mySwap (), τιμή var_2:' <<var_2<<endl?

ΕΠΙΣΤΡΟΦΗ 0?
}

συμπέρασμα

Κατανόηση των μεθόδων μετάδοσης παραμέτρων στο C ++ είναι πολύ κρίσιμο. Η γλώσσα προγραμματισμού C υποστηρίζει την Κλήση κατ 'αξία και την Κλήση μόνο κατά διεύθυνση. Όμως, το C ++ υποστηρίζει την Κλήση με αναφορά μαζί με τους δύο προηγούμενους μηχανισμούς. Σε αυτό το άρθρο, έχουμε δει αρκετά παραδείγματα εργασίας για να κατανοήσουμε την έννοια της κλήσης κατά διεύθυνση και της κλήσης με αναφορά. Η κλήση κατά διεύθυνση είναι μια πολύ ισχυρή και δημοφιλής μέθοδος σε εφαρμογές ενσωματωμένου τομέα.