Źródło: Arkusze CKE
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;
}
Warianty odpowiedzi
-
A
Argument funkcji został przekazany przez wartość, a nie przez referencję.
-
B
Funkcja zwraca wartość, chociaż nie powinna jej zwracać.
-
C
Niepoprawnie zdefiniowano działanie wewnątrz funkcji.
-
D
Zmienna x powinna być inicjowana wartością równą 1, a nie 0.
Wyjaśnienie
Przeanalizujmy, jak zmienne są przekazywane do funkcji.
W nagłówku funkcji parametr x jest przekazywany przez wartość. Oznacza to, że funkcja oblicz dostaje jedynie kopię liczby podanej w main. Modyfikacja x = x + i zachodzi wyłącznie na tej kopii i nie ma żadnego wpływu na oryginalną zmienną x z funkcji main.
W main zmienna x cały czas zachowuje swoją pierwotną wartość, czyli 0.
Gdybyśmy chcieli zmodyfikować oryginał, musielibyśmy przekazać parametr przez referencję.