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.


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

©2024 mgr Jerzy Wałaszek

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

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe