V tomto tutoriálu se dozvíme o volání C ++ odkazem na předání ukazatelů jako argumentu do funkce pomocí příkladů.
V tutoriálu Funkce C ++ jsme se dozvěděli o předávání argumentů funkci. Tato použitá metoda se nazývá předávání podle hodnoty, protože se předává skutečná hodnota.
Existuje však další způsob předávání argumentů funkci, kde nejsou předávány skutečné hodnoty argumentů. Místo toho je předán odkaz na hodnoty.
Například,
// 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; )
Všimněte si &
dovnitř void func2(int &numRef)
. To znamená, že jako parametr používáme adresu proměnné.
Když tedy func2()
funkci zavoláme main()
předáním proměnné num jako argumentu, ve skutečnosti předáváme adresu proměnné num namísto hodnoty 5 .

Příklad 1: Předávání odkazem bez ukazatelů
#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; )
Výstup
Před záměnou a = 1 b = 2 Po záměně a = 2 b = 1
V tomto programu jsme předali proměnné a a b swap()
funkci. Všimněte si definice funkce,
void swap(int &n1, int &n2)
Zde používáme &
k označení, že funkce bude přijímat adresy jako své parametry.
Kompilátor tedy může identifikovat, že místo skutečných hodnot je odkaz na proměnné předán funkčním parametrům.
Ve swap()
funkci ukazují funkční parametry n1 a n2 na stejnou hodnotu jako proměnné aab. Výměna tedy probíhá na skutečné hodnotě.
Stejný úkol lze provést pomocí ukazatelů. Další informace o ukazatelích najdete v ukazatelích C ++.
Příklad 2: Předávání odkazem pomocí ukazatelů
#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; )
Výstup
Před záměnou a = 1 b = 2 Po záměně a = 2 b = 1
Zde vidíme, že výstup je stejný jako v předchozím příkladu. Všimněte si řádku,
// &a is address of a // &b is address of b swap(&a, &b);
Zde je adresa proměnné předána během volání funkce, nikoli proměnné.
Vzhledem k tomu, že adresa je předána místo hodnoty, *
je nutné použít operátor dereference pro přístup k hodnotě uložené na této adrese.
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
a *n2
udává hodnotu uloženou na adrese n1 a n2.
Vzhledem k tomu, že n1 a n2 obsahují adresy a a b, udělá se cokoli *n1
a * n2 změní skutečné hodnoty a a b.
Když tedy ve main()
funkci vytiskneme hodnoty aab , hodnoty se změní.