INF.04 · pytanie 106
Dlaczego w wyniku działania tego kodu w języku C++ na ekranie pojawiła się wartość 0 zamiast 50? int oblicz(int x) { int i = 50; x = x + i; return i; } int main() { int x = 0; int wynik = oblicz(x); std::cout << x; }
- AArgument funkcji został przekazany przez wartość, a nie przez referencję.Poprawna
- BNiepoprawnie zdefiniowano działanie wewnątrz funkcji.
- CFunkcja zwraca wartość, chociaż nie powinna jej zwracać.
- DZmienna x powinna być inicjowana wartością równą 1, a nie 0.
Wyjaśnienie
W C++ funkcje standardowo dostają argumenty przez wartość, co znaczy, że dostają kopię tego, co do nich wysyłamy. W tym kodzie, jak widzisz, zmienna x idzie do funkcji oblicz jako kopia. To sprawia, że jakiekolwiek zmiany w x w tej funkcji nie mają wpływu na x w funkcji main. Dlatego po wywołaniu oblicz(x) wartość x w main zostaje taka sama. Jeśli chcesz, żeby zmiany wewnątrz funkcji były widoczne w funkcji, która ją wywołuje, to musisz użyć przekazywania przez referencję. Robisz to, dodając & w deklaracji parametru funkcji, czyli robisz to tak: void oblicz(int &x). Przekazywanie przez referencję to dobra praktyka, gdy chcesz, aby funkcja mogła zmieniać wartość argumentu. A dodatkowo jest to efektywniejsze, bo unikasz kopiowania danych, co bywa kosztowne, szczególnie przy dużych strukturach danych.