P005 - Przekazywanie parametrów przez referencję
Program uruchomiono w środowisku Bloodshed Dev-C++ 4.9.9.2
// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P005
//--------------------------

#include <iostream>

using namespace std;

void Zamiana1(int a, int b) // przez wartość
{
  int x;
  x = a; a = b; b = x;
}

void Zamiana2(int &a, int &b) // przez referencję
{
  int x;
  x = a; a = b; b = x;
}

main()
{
  int x = 12;
  int y = 35;
  
  cout << " x :  y\n"
          "-------\n"
       << x << " : " << y << endl;
  Zamiana1(x,y);
  cout << x << " : " << y << endl;
  Zamiana2(x,y);
  cout << x << " : " << y << endl << endl;
  system("pause");
}

 

Widok okienka konsoli w uruchomionym programie
 x :  y
-------
12 : 35
12 : 35
35 : 12

       Wyjaśnienie

W programie zdefiniowano dwie funkcje Zamiana1 i Zamiana2. Różnią się one jedynie tym, iż argumenty funkcji Zamiana1 są przekazywane poprzez wartość, a argumenty funkcji Zamiana2 przekazywane są poprzez referencję. Obie funkcję zamieniają ze sobą zawartości argumentów a i b. Z wyniku działania programu widać wyraźnie, iż zamiana argumentów w funkcji Zamiana1 nie wpływa na zmienne x i y funkcji main. Pozostają one bez zmian. Zatem możemy wyciągnąć wniosek, iż funkcja Zamiana1 działała jedynie na kopiach zmiennych x i y przekazanych poprzez stos. W przypadku funkcji Zamiana2 nastąpiła faktyczna zamiana zmiennych x i y. Wnioskujemy zatem, iż funkcja Zamiana2 otrzymawszy adresy argumentów uzyskała dostęp do zmiennych x i y funkcji main.

Do zapamiętania:

Jeśli funkcja otrzymuje argument poprzez wartość, to może pracować jedynie na jego lokalnej kopii. Wszelkie zmiany tego argumentu odnoszą się do lokalnej kopii na stosie.

Jeśli funkcja otrzymuje argument poprzez referencję, to faktycznie uzyskuje dostęp do zewnętrznego obiektu. Wszelkie zmiany tego argumentu wewnątrz funkcji będą również widoczne w obiekcie zewnętrznym.

Przekazywanie parametrów poprzez referencję przydaje się, gdy funkcja musi zwrócić więcej niż jeden wynik - w naszym przykładzie zmieniane były dwie zmienne.



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.