Istnieje kilka sposobów przesyłania danych (lub zmiennych) jako argumentu funkcji. Dwa z najpopularniejszych to przekazywanie przez wartość i przekazywanie przez referencję. Przekazywanie przez referencję pozwala funkcji modyfikować zmienną bez tworzenia kopii. Musimy zadeklarować zmienne referencyjne. Lokalizacja pamięci przekazanej zmiennej i parametru jest taka sama. Dlatego każda zmiana parametru odzwierciedla się również w zmiennej wewnątrz jej funkcji nadrzędnej. W tym artykule skupiono się na omówieniu sposobu przekazywania zmiennych przez referencję w C++.
Co to jest przekazanie przez referencje?
Kiedy zmienna jest przekazywana jako referencja do funkcji, adres zmiennej jest przechowywany w zmiennej wskaźnikowej wewnątrz funkcji. Zatem zmienna wewnątrz funkcji jest aliasem przekazywanej zmiennej. Dlatego wszelkie operacje wykonane na zmiennej wewnątrz funkcji zostaną również odzwierciedlone w funkcji wywołującej.
- Ta zdolność do odzwierciedlania zmian może zwrócić więcej niż jedną wartość przez funkcję.
- Ponadto funkcja void może technicznie zwracać wartości przy użyciu tej metody.
The & Operator (adres) oznacza wartości przekazywane w funkcji przez odwołanie. Poniżej znajduje się program C++ do implementacji przekazywania przez referencje:
C++
// C++ program to implement> // pass-by-reference> #include> using> namespace> std;> > void> f(>int> & x)> {> >x--;> }> > // Driver code> int> main()> {> >int> a = 5;> >cout << a << endl;> >f(a);> >cout << a << endl;> }> |
>
C
>Wyjście
5 4>
Wyjaśnienie:
- Po pierwsze, funkcja jest definiowana z zwracanym typem danych void i przyjmuje wartość przez referencję (jak to oznaczono przez & znak adresu w parametrach formalnych).
- Funkcja zmniejsza wartość swojego parametru formalnego o 1.
- Następnie wewnątrz funkcji głównej zmienna całkowita o nazwie A jest inicjowany wartością 5.
- Wartość „a” jest drukowana na konsoli. Wywoływana jest funkcja f(), a zmienna jest przekazywana jako argument.
- Wewnątrz funkcji wartość zmiennej jest zmniejszana o 1.
- Po powrocie z funkcji ponownie wyświetlana jest wartość zmiennej, która okazała się o 1 mniejsza od wartości pierwotnej.
Dlatego zmiany w zmiennej przekazywanej przez referencję do funkcji są odzwierciedlane w funkcji wywołującej.
Funkcja zamiany przy użyciu funkcji Pass-By-Reference
Funkcja swap zamienia wartości dwóch zmiennych otrzymanych jako argumenty. Poniżej znajduje się program C++ służący do zamiany wartości dwóch zmiennych przy użyciu przekazywania przez odwołanie.
C++
// C++ program to swap the values> // of two variables using> // pass-by-reference> #include> > // Prototype of the function> void> swap(>int> &,>int> &);> > // Driver code> int> main()> {> >int> x, y;> > >// Inputting two variables> >printf>(>'Enter the value of x and y
'>);> >scanf>(>'%d%d'>, &x, &y);> > >// Displaying their values before swapping> >printf>(>'Before Swapping
x = %d
y = %d
'>,> >x, y);> > >// Calling the function & sending variable> >// values as argument> >swap(x, y);> > >// Displaying their values after swapping> >printf>(>'After Swapping
x = %d
y = %d
'>,> >x, y);> >return> 0;> }> > // Function uses pass by reference method> // to swap passed variable values> void> swap(>int> &a,>int> &b)> {> >int> temp;> > >temp = b;> >b = a;> >a = temp;> }> |
>
>
Wyjście:
Wyjaśnienie:
- Najpierw definiowany jest prototyp funkcji (opcjonalnie, jeśli funkcja jest zdefiniowana przed funkcją główną).
- Wewnątrz funkcji głównej wartości obu zmiennych są pobierane od użytkownika.
- Wartości przed wywołaniem funkcji wymiany są wypisywane na konsoli.
- Następnie wartości są przekazywane jako argument do funkcji wymiany.
- Funkcja zamiany wykorzystuje wywołanie przez odwołanie i zawiera kod do zamiany dwóch zmiennych.
- Po zakończeniu funkcji wartość obu zmiennych jest wyświetlana w funkcji głównej (po wywołaniu funkcji swap).
- Zamienione wartości zostaną wyświetlone na ekranie.
Przekaż referencje za pomocą wskaźników
Możliwe jest także przekazanie adresu zmiennej z funkcji wywołującej i użycie ich jako wskaźnika wewnątrz wywoływanej funkcji. Pozwala to nieco wyraźniej zmieniać wartości zmiennych w funkcji.
Poniżej znajduje się program C++ implementujący przekazywanie przez referencje ze wskaźnikami:
C++
// C++ program to implement> // pass-by-reference with> // pointers> #include> using> namespace> std;> > void> f(>int> *x)> {> >*x = *x - 1;> }> > // Driver code> int> main()> {> >int> a = 5;> >cout << a << endl;> >f(&a);> >cout << a << endl;> }> |
ważny
>
>Wyjście
5 4>
Wyjaśnienie:
- Po pierwsze, funkcja jest definiowana z zwracanym typem danych void i przyjmuje wartość jako wskaźniki (co jest oznaczone przez * gwiazdka wpisać parametry formalne).
- Funkcja zmniejsza wartość swojego parametru formalnego o 1.
- Następnie wewnątrz funkcji głównej zmienna całkowita o nazwie „a” jest inicjowana wartością 5.
- Następnie wyświetlana jest ta wartość. Funkcja jest wywoływana, a adres zmiennej jest przekazywany jako argument.
- Wewnątrz funkcji wartość zmiennej wskaźnikowej jest zmniejszana o 1.
- Po powrocie z funkcji ponownie wyświetlana jest wartość zmiennej, która okazała się o 1 mniejsza od wartości pierwotnej.