160 Godzina 11
Main. Przed zamiana, x: 5 y: 10 Zamień. Przed zamiana, x: 5 y: 10 Zamień. Po zamianie, x: 10 y: 5 Main. Po zamianie, x: 5 y: 10
Ten program, w funkcji main (), inicjalizuje dwie zmienne i przekazuje je do funkcji Zamień(), która teoretycznie je zamienia. Jednak po przetestowaniu wyniku w funkcji main() okazuje się, że nic się nie zmieniło!
Problem polega tutaj na tym, że zarówno x jaki i y są przekazywane przez wartość.
Oznacza to, że są tworzone lokalne kopie tych zmiennych i wszystkie operacje są wykonywane na kopiach, nie powodując żadnych zmian zmiennych oryginalnych. To, czego tutaj potrzeba, to przekazywanie x i y przez referencje.
Można ten problem rozwiązać na dwa sposoby. Możesz zamienić parametry funkcji Zamień () na wskaźniki do oryginalnych wartości albo przekazywać referencje,
Kiedy przekazujesz wskaźnik, to faktycznie przekazujesz adres zmiennej, co pozwala funkcji na manipulowanie jej wartością. Żeby funkcja Zamień () mogła zamieniać dwie zmienne wartościami, to musimy ja zadeklarować tak, aby jako parametry pobierała dwa wskaźniki do zmiennych typu int. Taki zabieg pozwoli funkcji na pośrednie odwołanie się do tych zmiennych i zamianę ich wartości. Ilustruje to listing 11.5.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
// Listing 11.5. - przekazywanie przez referencje // z wykorzystaniem wskaźników #include <iostream.h>
void Zamień(int *x, int *y);
int main ()
{
int x = 5, y * 10;
cout « "Main. Przed zamiana, x: " « x « " y: " « y « *"\n";
Zamień(&x, Sy);
cout « "Main. Po zamianie, x: " « x « " y: " « y « "\n”; return 0; ł
Main. Przed zamiana, x: 5 y: 10 Zamień. Przed zamiana, x; 5 y: 10 Zamień. Po zamianie, x: 10 y: 5 Main. Po zamianie, x: 5 y: 10
Ten program, w funkcji main (), inicjalizuje dwie zmienne i przekazuje je do funkcji Zamień (), która teoretycznie je zamienia. Jednak po przetestowaniu wyniku w funkcji main () okazuje się, że nic się nie zmieniło!
Problem polega tutaj na tym, że zarówno x jaki i y są przekazywane przez wartość. Oznacza to, że są tworzone lokalne kopie tych zmiennych i wszystkie operacje są wykonywane na kopiach, nie powodując żadnych zmian zmiennych oryginalnych. To, czego tutaj potrzeba, to przekazywanie x i y przez referencje.
Można ten problem rozwiązać na dwa sposoby. Możesz zamienić parametry funkcji Zamień () na wskaźniki do oryginalnych wartości albo przekazywać referencje,
Kiedy przekazujesz wskaźnik, to faktycznie przekazujesz adres zmiennej, co pozwala funkcji na manipulowanie jej wartością. Żeby funkcja Zamień () mogła zamieniać dwie zmienne wartościami, to musimy ja zadeklarować tak, aby jako parametry pobierała dwa wskaźniki do zmiennych typu int. Taki zabieg pozwoli funkcji na pośrednie odwołanie się do tych zmiennych i zamianę ich wartości. Ilustruje to listing
11.5.
1
2
3
4
5
6
7
8 9
10; 11:
12
13
14
15
16 17
II Listing 11.5. - przekazywanie przez referencje // z wykorzystaniem wskaźników finclude <iostream.h>
void Zamień(int *x, int *y);
int main()
int x = 5, y = 10;
cout « "Main. Przed zamiana, x: " « x « " y: " « y « *-"\n";
Zamień(Sx, Sy);
cout « "Main. Po zamianie, x: " « x « " y: " « y « "\n"; return 0;
void Zamień(int *px, int *py)