Referencje 161
Referencje 161
18 |
{ | ||
19 |
int temp; | ||
20 | |||
21 |
cout « "Zamień, ‘■♦♦py « "\n"; |
Przed zamiana, *px: " « *px « " *py: " « | |
22 | |||
23 |
temp = *px; | ||
24 |
*px = *py; | ||
25 |
♦py = temp; | ||
26 | |||
27 |
cout « "Zamień, ♦♦♦py « "\n"; |
Po zamianie, *px: " « *px « " *py: " « | |
28 | |||
29 |
1 |
Main. Przed zamiana, x: 5 y: 10 Zamień. Przed zamiana, *px: 5 *py: 10 Zamień. Po zamianie, *px: 10 *py: 5 Main. Po zamianie, x: 10 y: 5
ANALIZA:
Udało się! W linii 5 zmieniliśmy prototyp funkcji Zamień () tak, aby jako parametry przyjmowała nie zmienne całkowite, a wskaźniki na nie. Zobacz, jak wywołana jest funkcja Zamień(), jej parametrami są adresy zmiennych, które chcemy zamienić.
W linii 19 deklarowana jest zmienna lokalna temp. Nie musi ona być wskaźnikiem ponieważ jej zadaniem jest przechowanie wartości *px (czyli wartości x w funkcji wywołującej). Po zakończeniu funkcji zmienna temp jest usuwana z pamięci.
W linii 23 zmiennej temp przypisywana jest wartość wskazywana przez px. W linii 24 wartość spod adresu px jest przepisywana pod adres zawarty w py. W linii 25, wartość przechowywane w temp jest przepisywana pod adres py.
Efektem końcowym jest zamiana wartości zmiennych w funkcji wywołującej.
Poprzedni program działa, lecz funkcja Zamień () jest raczej nieporęczna. Po pierwsze, wielokrotne pośrednie odwoływanie się do zmiennych wskazywanych powoduje, że takie rozwiązanie jest podatne na błędy. Po drugie, konieczność przekazywania adresów zmiennych powoduje „ujawnienie” wewnętrznych mechanizmów funkcji Zamień ().
Zamierzeniem C++ jest oddzielenie użytkownika funkcji od jej wewnętrznych mechanizmów i implementacji. Przekazywanie wskaźników przenosi część ciężaru wykonania funkcji na funkcję wywołującą (na użytkownika). Listing 11.6. demonstruje rozwiązanie problemu z wykorzystaniem referencji.
18 |
( | ||
19 |
int temp; | ||
20 | |||
21 |
cout « "Zamień. -*py « "\n"; |
Przed zamiana, *px: " « *px « " *py: " « | |
22 | |||
23 |
temp = *px; | ||
24 |
*px = *py; | ||
25 |
*py = temp; | ||
26 | |||
27 |
cout « "Zamień. w*Py « "\n"; |
Po zamianie, *px: " « *px « " *py: " « | |
28 | |||
29 |
1 |
Main. Przed zamiana, x: 5 y: 10 Zamień. Przed zamiana, *px: 5 *py: 10 Zamień. Po zamianie, *px: 10 *py: 5 Main. Po zamianie, x: 10 y: 5
Udało się! W linii 5 zmieniliśmy prototyp funkcji Zamień () tak, aby fi jako parametry przyjmowała nie zmienne całkowite, a wskaźniki na ' -<■ nje 2obacz, jak wywołana jest funkcja Zamień (), jej parametrami są
adresy zmiennych, które chcemy zamienić.
W linii 19 deklarowana jest zmienna lokalna temp. Nie musi ona być wskaźnikiem ponieważ jej zadaniem jest przechowanie wartości *px (czyli wartości x w funkcji wywołującej). Po zakończeniu funkcji zmienna temp jest usuwana z pamięci.
W linii 23 zmiennej temp przypisywana jest wartość wskazywana przez px. W linii 24 wartość spod adresu px jest przepisywana pod adres zawarty w py. W linii 25, wartość przechowywane w temp jest przepisywana pod adres py.
Efektem końcowym jest zamiana wartości zmiennych w funkcji wywołującej.
Poprzedni program działa, lecz funkcja Zamień () jest raczej nieporęczna. Po pierwsze, wielokrotne pośrednie odwoływanie się do zmiennych wskazywanych powoduje, że takie rozwiązanie jest podatne na błędy. Po drugie, konieczność przekazywania adresów zmiennych powoduje „ujawnienie" wewnętrznych mechanizmów funkcji Zamień ().
Zamierzeniem C++ jest oddzielenie użytkownika funkcji od jej wewnętrznych mechanizmów i implementacji. Przekazywanie wskaźników przenosi część ciężaru wykonania funkcji na funkcję wywołującą (na użytkownika). Listing 11.6. demonstruje rozwiązanie problemu z wykorzystaniem referencji.