Strona główna › Pytania INF.04 › Pytanie 110
INF.04 · pytanie #110
Dlaczego w wyniku działania tego kodu w języku C++ na ekranie pojawiła się wartość 0 zamiast 50? <br><br> <pre class="code-block"> int oblicz(int x) { int i = 50; x = x + i; return i; } int main() { int x = 0; int wynik = oblicz(x); std::cout << x; } </pre>
- ANiepoprawnie zdefiniowano działanie wewnątrz funkcji.
- BZmienna x powinna być inicjowana wartością równą 1, a nie 0.
- CArgument funkcji został przekazany przez wartość, a nie przez referencję.
- DFunkcja zwraca wartość, chociaż nie powinna jej zwracać.
Poprawna odpowiedź: C. Argument funkcji został przekazany przez wartość, a nie przez referencję.
Kliknij odpowiedź, którą uważasz za poprawną.
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.
🤖 Wyjaśnienie generowane przez AI – weryfikuj w oficjalnych źródłach.