C++

C++ Call By Address i Call By Reference

C++ Call By Address i Call By Reference

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, i.mi., zadzwoń według wartości, zadzwoń według adresu i zadzwoń 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 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 w C++ powinien mieć funkcję „main()”. Funkcja „main()” jest punktem wejścia do programu w 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:

int i = 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ą i.mi. „ptr” i inicjowanie go adresem zmiennej „i”.

Co to jest odniesienie?

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

int a = 200;
int &r = a;

W tym przykładzie zadeklarowaliśmy liczbę całkowitą i.mi. „a”, a następnie zadeklarowana zmienna referencyjna „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 - Zadzwoń przez adres i Zadzwoń przez odniesienie.

Co to jest Zadzwoń według adresu/Przekaż według adresu??

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 rzeczywistych parametrów i je modyfikować. Zobaczymy przykład metody Call by address w dalszej części tego artykułu.

Co to jest wywołanie przez odniesienie/przekazanie przez odniesienie??

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

Przykłady:

Teraz, ponieważ rozumiemy pojęcie 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 podano w celu wyjaśnienia, jak działa metoda Call by address 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 wywołanie przez mechanizm adresu. Z funkcji „main()” wywołujemy funkcję „hello()” i przekazujemy adres „var”. W definicji funkcji otrzymujemy adres „var” w zmiennej wskaźnikowej, i.mi., „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()”.

#zawierać
przy użyciu standardowej przestrzeni nazw;
nieważne cześć(int *p)

Cout << endl << "Inside hello() function : " << endl;
Cout << "Value of *p = " << *p << endl;
*p = 200;
Cout << "Value of *p = " << *p << endl;
Cout << "Exiting hello() function." << endl;

int main()

int zm = 100;
Cout << "Value of var inside main() function = " << var << endl;
cześć(&zmienna);
Cout << endl << "Value of var inside main() function = " << var << endl;
zwróć 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ć wykorzystana do rozwiązania rzeczywistego problemu. Na przykład chcemy napisać funkcję zamieniającą dwie zmienne. 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()”.

#zawierać
przy użyciu standardowej przestrzeni nazw;
void mySwap(int *vptr_1, int *vptr_2)

int zmienna_temp;
zmienna_temp = *vptr_1;
*vptr_1 = *vptr_2;
*vptr_2 = zmienna_temp;

int main()

int zm_1 = 100;
int zm_2 = 300;
Cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
Cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
Cout << "Calling mySwap() function - Call by address." << endl << endl;
mojaZamień(&zmienna_1, &zmienna_2);
Cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
Cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
zwróć 0;

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

W tym przykładzie pokażemy, jak działa wywołanie przez odwołanie w C++. W definicji funkcji „hello()” wartość jest odbierana jako zmienna referencyjna (&p). Za pomocą zmiennej referencyjnej (i.mi., p), jesteśmy w stanie zmienić wartość rzeczywistego parametru (var) wewnątrz funkcji „main()”.

#zawierać
przy użyciu standardowej przestrzeni nazw;
nieważne cześć (int i p)

Cout << endl << "Inside hello() function : " << endl;
Cout << "Value of p = " << p << endl;
p = 200;
Cout << "Value of p = " << p << endl;
Cout << "Exiting hello() function." << endl;

int main()

int zm = 100;
Cout << "Value of var inside main() function = " << var << endl;
cześć(zmienna);
Cout << endl << "Value of var inside main() function = " << var << endl;
zwróć 0;

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

To kolejny przykład połączenia przez odniesienie. W tym przykładzie pokażemy, jak wywołanie przez odwołanie działa w C++ na przykładzie z prawdziwego świata. 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.

#zawierać
przy użyciu standardowej przestrzeni nazw;
void mySwap(int &vref_1, int &vref_2)

int zmienna_temp;
zmienna_temp = odn_1;
vref_1 = vref_2;
vref_2 = zmienna_temp;

int main()

int zm_1 = 100;
int zm_2 = 300;
Cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
Cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
Cout << "Calling mySwap() function - Call by reference." << endl << endl;
mojaZamień(zm_1, zm_2);
Cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
Cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
zwróć 0;

Wniosek

Zrozumienie metod przekazywania parametrów w do++ 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 odniesienie 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 potężna i popularna metoda we wbudowanych aplikacjach domenowych.

Gry Jak zwiększyć FPS w Linuksie??
Jak zwiększyć FPS w Linuksie??
FPS oznacza Klatki na sekundę. Zadaniem FPS jest pomiar liczby klatek na sekundę podczas odtwarzania wideo lub wydajności gier. W prostych słowach lic...
Gry Najlepsze gry w laboratorium aplikacji Oculus
Najlepsze gry w laboratorium aplikacji Oculus
Jeśli jesteś posiadaczem gogli Oculus, musisz wiedzieć o sideloadingu. Sideloading to proces instalowania w zestawie nagłownym treści innych niż sklep...
Gry Top 10 Games to Play on Ubuntu
Top 10 Games to Play on Ubuntu
Windows platform has been one of the dominating platforms for gaming because of the huge percentage of games that are developing today to natively sup...