I den här handledningen lär vi oss om C ++ -anrop med referens för att skicka pekare som ett argument till funktionen med hjälp av exempel.
I C ++ -funktionshandboken lärde vi oss att skicka argument till en funktion. Den här metoden kallas passera med värde eftersom det faktiska värdet passeras.
Det finns dock ett annat sätt att skicka argument till en funktion där argumentens faktiska värden inte skickas. Istället skickas referensen till värden.
Till exempel,
// 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; )
Lägg märke till &
in void func2(int &numRef)
. Detta anger att vi använder variabelns adress som vår parameter.
Så när vi kallar in func2()
funktionen main()
genom att skicka variabeln num som ett argument, skickar vi faktiskt adressen till variabeln istället för värdet 5 .

Exempel 1: Vidarebefordran utan pekare
#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; )
Produktion
Innan du byter a = 1 b = 2 Efter byte a = 2 b = 1
I det här programmet skickade vi variablerna a och b till swap()
funktionen. Lägg märke till funktionsdefinitionen,
void swap(int &n1, int &n2)
Här använder vi för &
att beteckna att funktionen accepterar adresser som parametrar.
Därför kan kompilatorn identifiera att istället för faktiska värden, hänvisas variablerna till funktionsparametrar.
I swap()
funktionen pekar funktionsparametrarna n1 och n2 på samma värde som variablerna a respektive b. Därför sker bytet på verkligt värde.
Samma uppgift kan göras med hjälp av pekare. För att lära dig mer om pekare, besök C ++ pekare.
Exempel 2: Skicka genom referens med hjälp av pekare
#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; )
Produktion
Innan du byter a = 1 b = 2 Efter byte a = 2 b = 1
Här kan vi se att produktionen är densamma som i föregående exempel. Lägg märke till raden,
// &a is address of a // &b is address of b swap(&a, &b);
Här skickas variabelns adress under funktionsanropet snarare än variabeln.
Eftersom adressen skickas istället för värde, *
måste en referensoperatör användas för att komma åt värdet som är lagrat i den adressen.
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
och *n2
ger värdet lagrat vid adressen n1 respektive n2.
Eftersom n1 och n2 innehåller adresserna till a och b görs allt för *n1
och * n2 kommer att ändra de faktiska värdena för a och b.
Därför, när vi skriver ut värdena för a och b i main()
funktionen, ändras värdena.