Šajā apmācībā mēs uzzināsim par C ++ izsaukumu, atsaucoties uz nodošanas rādītājiem kā argumentu funkcijai ar piemēru palīdzību.
C ++ Funkciju apmācībā mēs uzzinājām par argumentu nodošanu funkcijai. Šo izmantoto metodi sauc par vērtības nodošanu, jo tiek nodota faktiskā vērtība.
Tomēr ir vēl viens veids, kā argumentus nodot funkcijai, kur faktisko argumentu vērtības netiek nodotas. Tā vietā tiek nodota atsauce uz vērtībām.
Piemēram,
// 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; )
Paziņojums &
in void func2(int &numRef)
. Tas nozīmē, ka mēs kā parametru izmantojam mainīgā adresi.
Tātad, kad mēs izsaucam func2()
funkciju main()
, nododot mainīgo num kā argumentu, mēs faktiski nododam num mainīgā adresi 5. vērtības vietā .

1. piemērs: nodošana atsaucei bez rādītājiem
#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; )
Rezultāts
Pirms a = 1 maiņas b = 2 Pēc a = 2 maiņas b = 1
Šajā programmā mēs mainījām mainīgos a un b swap()
funkcijai. Ievērojiet funkcijas definīciju,
void swap(int &n1, int &n2)
Šeit mēs izmantojam, &
lai apzīmētu, ka funkcija kā parametrus pieņem adreses.
Tādējādi sastādītājs var noteikt, ka faktisko vērtību vietā mainīgo lielumu atsauce tiek nodota funkciju parametriem.
Jo swap()
funkciju, funkcija parametrus N1 un N2 ir vērsti uz pašu vērtību kā mainīgajiem A un B, attiecīgi. Tādējādi mainīšana notiek uz faktisko vērtību.
To pašu uzdevumu var veikt, izmantojot rādītājus. Lai uzzinātu par rādītājiem, apmeklējiet C ++ rādītājus.
2. piemērs: nodošana ar atsauci, izmantojot rādītājus
#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; )
Rezultāts
Pirms a = 1 maiņas b = 2 Pēc a = 2 maiņas b = 1
Šeit mēs varam redzēt, ka izeja ir tāda pati kā iepriekšējā piemērā. Ievērojiet līniju,
// &a is address of a // &b is address of b swap(&a, &b);
Šeit mainīgā adrese tiek nodota funkcijas izsaukuma laikā, nevis mainīgā.
Tā kā adrese tiek nodota vērtības vietā, *
lai piekļūtu šai adresei saglabātajai vērtībai, jāizmanto novirzes operators .
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
un *n2
dod vērtību, kas saglabāta attiecīgi adresēs n1 un n2.
Tā kā n1 un n2 satur a un b adreses, viss tiek darīts, *n1
un * n2 mainīs a un b faktiskās vērtības.
Tādējādi, kad mēs main()
funkcijā drukājam a un b vērtības, vērtības tiek mainītas.