C++ Call By Address i Call By Reference

C Call Address



C++ to elastyczny język programowania ogólnego przeznaczenia. Został pierwotnie stworzony przez Bjarne Stroustrup, duński informatyk w 1985 roku. C++ obsługuje trzyparametrowe metody przekazywania, tj. wywołanie według wartości, wywołanie przez adres i wywołanie przez odwołanie. W tym artykule omówimy mechanizm call by address i call by reference.

Czym jest funkcja?

Zanim przejdziemy do właściwego tematu, musimy zrozumieć, czym jest ta funkcja w C++. Wielu z was może już znać funkcje.







Funkcja to w zasadzie fragment kodu, którego można użyć do wykonania określonego zadania. Funkcja służy głównie do redukcji powtarzalnego kodu w programie C++. Pobiera dane wejściowe jako parametry i zwraca dane wyjściowe jako wartość zwracaną. Jeśli raz zdefiniujemy funkcję, możemy ją wywołać/użyć wielokrotnie w dalszej części naszego programu. W ten sposób zapisujemy w programie dużo powtarzalnego kodu.



Każdy program C++ powinien mieć funkcję main(). Funkcja main() jest punktem wejścia do programu C++. Oprócz funkcji main() programista może zdefiniować tyle funkcji, ile chce.



Oto składnia definiowania funkcji:





Return_type Nazwa funkcji(Lista parametrów wejściowych)

Funkcja w C++ może przyjąć 0 lub więcej parametrów wejściowych, natomiast może zwrócić tylko jedną zwracaną-wartość.

Co to jest adres?

W C++ istnieją dwa typy zmiennych (podobne do języka C) – zmienna danych i zmienna adresowa. Zmienna adresu służy do przechowywania adresu innej zmiennej danych. Rozważmy na przykład następujący fragment kodu:



inti= 100;
int *ptr= &i;

Tutaj pierwsza instrukcja mówi nam, że zmienna i jest zmienną danych i przechowuje wartość 100. W drugiej instrukcji deklarujemy zmienną wskaźnikową, tj. ptr, i inicjujemy ją adresem zmiennej i.

Co to jest odniesienie?

Odniesienie to kolejna potężna funkcja języka C++. Rozważmy następujący fragment kodu:

intdo= 200;
int &r=do;

W tym przykładzie zadeklarowaliśmy liczbę całkowitą, czyli a, a następnie zadeklarowaliśmy zmienną referencyjną r, która jest inicjowana wartością a. Tak więc zmienna referencyjna jest niczym innym jak aliasem innej zmiennej.

Metody przekazywania parametrów:

Istnieją trzy rodzaje metod przekazywania parametrów w języku C++:

  1. Zadzwoń według wartości / Przekaż według wartości
  2. Zadzwoń według adresu / Podaj według adresu
  3. Zadzwoń przez odniesienie / Przekaż przez odniesienie

W tym artykule omawiamy opcje – Zadzwoń przez adres i Zadzwoń przez odniesienie.

Co to jest Call By Address / Pass by Address?

W przypadku metody Call by address / Pass by address argumenty funkcji przekazywane są jako adres. Funkcja wywołująca przekazuje adres parametrów. Zmienne wskaźnikowe są używane w definicji funkcji. Za pomocą metody Call by address funkcja może uzyskać dostęp do aktualnych parametrów i je modyfikować. Zobaczymy przykład metody Call by address w dalszej części tego artykułu.

Co to jest Call By Reference / Pass by reference?

W metodzie Call by reference / Pass by reference parametry funkcji są przekazywane jako referencja. W definicji funkcji aktualne parametry są dostępne za pomocą zmiennej referencyjnej.

Przykłady:

Teraz, ponieważ rozumiemy koncepcję metod przekazywania parametrów, zobaczymy kilka przykładowych programów, aby zrozumieć mechanizm przekazywania parametrów w C++:

  1. Przykład 1 – Zadzwoń według adresu (1)
  2. Przykład 2 – Zadzwoń według adresu (2)
  3. Przykład-3 – Zadzwoń przez odniesienie (1)
  4. Przykład 4 – Zadzwoń przez odniesienie (2)

Pierwsze dwa przykłady są podane w celu wyjaśnienia, jak metoda Call by address działa w C++. Ostatnie dwa przykłady mają na celu wyjaśnienie koncepcji Call by reference.

Przykład 1 – Zadzwoń według adresu (1)

W tym przykładzie zademonstrujemy mechanizm wywołania przez adres. Z funkcji main() wywołujemy funkcję hello() i przekazujemy adres var. W definicji funkcji otrzymujemy adres var w zmiennej wskaźnikowej, czyli p. Wewnątrz funkcji hello wartość var ​​jest zmieniana na 200 za pomocą wskaźnika. Dlatego wartość var ​​jest zmieniana na 200 wewnątrz funkcji main() po wywołaniu funkcji hello().

#włączać
za pomocą przestrzeń nazwgodziny;

próżniadzień dobry(int *P)
{
koszt <<koniec<< 'Wewnątrz funkcji hello() : ' <<koniec;
koszt << 'Wartość *p = ' << *P<<koniec;
*P= 200;
koszt << 'Wartość *p = ' << *P<<koniec;
koszt << 'Wychodzenie z funkcji hello().' <<koniec;
}

intGłówny()
{
intgdzie= 100;
koszt << 'Wartość var ​​wewnątrz funkcji main() = ' <<gdzie<<koniec;

dzień dobry(&gdzie);

koszt <<koniec<< 'Wartość var ​​wewnątrz funkcji main() = ' <<gdzie<<koniec;

powrót 0;
}

Przykład 2 – Zadzwoń według adresu (2)

To kolejny przykład metody wywołania przez adres. W tym przykładzie wyjaśnimy, w jaki sposób metoda call by address może zostać użyta do rozwiązania rzeczywistego problemu. Na przykład chcemy napisać funkcję do zamiany dwóch zmiennych. Jeśli użyjemy mechanizmu call by value do zamiany dwóch zmiennych, rzeczywiste zmienne nie zostaną zamienione w funkcji wywołującej. W takim scenariuszu można zastosować metodę wywołania przez adres. W tym przykładzie przekazujemy adres zarówno zm_1 (&zmienna_1), jak i zm_2 (&zmienna_2) do funkcji mySwap(). Wewnątrz funkcji mySwap() zamieniamy wartości tych dwóch zmiennych za pomocą wskaźników. Jak widać na poniższym wyjściu, rzeczywista wartość tych zmiennych jest zamieniana w funkcji main() po wykonaniu funkcji mySwap().

#włączać
za pomocą przestrzeń nazwgodziny;

próżniamojaZamień(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

intGłówny()
{
intvar_1= 100;
intzm_2= 300;

koszt << 'Przed wywołaniem funkcji mySwap(), wartość var_1 : ' <<var_1<<koniec;
koszt << 'Przed wywołaniem funkcji mySwap(), wartość var_2 : ' <<zm_2<<koniec<<koniec;

koszt << 'Wywołanie funkcji mySwap() — Wywołanie według adresu.' <<koniec<<koniec;
mojaZamień(&var_1,&zm_2);

koszt << 'Po wywołaniu funkcji mySwap(), wartość var_1 : ' <<var_1<<koniec;
koszt << 'Po wywołaniu funkcji mySwap(), wartość var_2 : ' <<zm_2<<koniec;

powrót 0;
}

Przykład-3 – Zadzwoń przez odniesienie (1)

W tym przykładzie pokażemy, jak call by reference działa w C++. W definicji funkcji hello() wartość jest odbierana jako zmienna referencyjna (&p). Za pomocą zmiennej referencyjnej (tj. p) jesteśmy w stanie zmienić wartość rzeczywistego parametru (var) wewnątrz funkcji main().

#włączać
za pomocą przestrzeń nazwgodziny;

próżniadzień dobry(int &P)
{
koszt <<koniec<< 'Wewnątrz funkcji hello() : ' <<koniec;
koszt << „Wartość p = ” <<P<<koniec;
P= 200;
koszt << „Wartość p = ” <<P<<koniec;
koszt << 'Wychodzenie z funkcji hello().' <<koniec;
}

intGłówny()
{
intgdzie= 100;
koszt << 'Wartość var ​​wewnątrz funkcji main() = ' <<gdzie<<koniec;

dzień dobry(gdzie);

koszt <<koniec<< 'Wartość var ​​wewnątrz funkcji main() = ' <<gdzie<<koniec;

powrót 0;
}

Przykład 4 – Zadzwoń przez odniesienie(2)

To kolejny przykład wywołania przez odniesienie. W tym przykładzie zademonstrujemy, jak call by reference działa w C++ na przykładzie ze świata rzeczywistego. Funkcja mySwap() jest wywoływana z funkcji main() z następującymi parametrami – var_1 i var_2. Wewnątrz funkcji mySwap() otrzymujemy parametry jako zmienne referencyjne.

#włączać
za pomocą przestrzeń nazwgodziny;

próżniamojaZamień(int &vref_1,int &vref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

intGłówny()
{
intvar_1= 100;
intzm_2= 300;

koszt << 'Przed wywołaniem funkcji mySwap(), wartość var_1 : ' <<var_1<<koniec;
koszt << 'Przed wywołaniem funkcji mySwap(), wartość var_2 : ' <<zm_2<<koniec<<koniec;

koszt << 'Wywołanie funkcji mySwap() — Wywołanie przez odwołanie.' <<koniec<<koniec;
mojaZamień(zm_1, zm_2);

koszt << 'Po wywołaniu funkcji mySwap(), wartość var_1 : ' <<var_1<<koniec;
koszt << 'Po wywołaniu funkcji mySwap(), wartość var_2 : ' <<zm_2<<koniec;

powrót 0;
}

Wniosek

Zrozumienie metod przekazywania parametrów w C++ jest bardzo ważne. Język programowania C obsługuje tylko Call by value i Call by address. Ale C++ obsługuje wywołanie przez odwołanie wraz z dwoma poprzednimi mechanizmami. W tym artykule widzieliśmy kilka działających przykładów, aby zrozumieć koncepcję Call by address i Call by reference. Call by address to bardzo wydajna i popularna metoda w aplikacjach z wbudowanymi domenami.