Kwalifikacja: EE8 - Kwalifikacja EE8
Zawód: Technik informatyk
Dokonaj analizy fragmentu kodu w języku C++.
#include void suma (int a, int b) {a=a+b;} void main() { int a=7, b=3, x; suma(a,b); x=a+b; }
Jaką wartość przyjmie zmienna x po wykonaniu tego fragmentu kodu?
#include void suma (int a, int b) {a=a+b;} void main() { int a=7, b=3, x; suma(a,b); x=a+b; }
Jaką wartość przyjmie zmienna x po wykonaniu tego fragmentu kodu?
Odpowiedzi
Informacja zwrotna
W tym programie zmienna x po wykonaniu funkcji wynosi 10. To dlatego, że mamy funkcję `suma`, która przyjmuje dwa całkowite argumenty, ale nie zmienia oryginalnych zmiennych `a` i `b` w `main`. W C++ działa to tak, że argumenty są przekazywane przez wartość, co znaczy, że wszelkie zmiany w funkcji dotyczą tylko jej lokalnych kopii a nie oryginalnych wartości. Więc po wywołaniu `suma(a, b)` nasze `a` i `b` pozostają takie same. Potem, w linii `x = a + b;` mamy dodawane 7 i 3, co daje nam 10. Fajnie jest zrozumieć ten mechanizm, bo to ważne w programowaniu. Jak chcemy zmieniać coś w zmiennych, powinniśmy skorzystać z przekazywania przez referencję albo wskaźniki. To może być istotne zwłaszcza, kiedy pracujemy ze strukturami danych, gdzie zmiany powinny być widoczne poza funkcją.
Nowi programiści mogą często mylić działanie funkcji `suma` i jej wpływ na zmienne `a` i `b`. Czasem mogą myśleć, że po wywołaniu `suma(a, b)`, te zmienne w `main` się zmieniają. Takie myślenie prowadzi do błędnych odpowiedzi, gdzie coś jak 6, 7 czy 13 może wydawać się właściwe. Na przykład, odpowiedź 6 może być wynikiem błędnego założenia, że 3 (czyli wartość b) dodaje się do 7 (wartość a) w funkcji `suma`. To nie jest prawda, bo funkcja nie modyfikuje oryginalnych zmiennych, a tylko je kopiuje. Odpowiedź 7 też może pojawić się z tego samego nieporozumienia – myli się wartości `a` przed i po wywołaniu funkcji. A interpretacja 13 pokazuje, że myślimy, że oba argumenty dodają się i zmieniają wartość `a`, co jest całkowicie mylne, bo suma dzieje się w lokalnym kontekście funkcji. Zrozumienie tego przekazywania przez wartość w C++ to podstawa programowania i ważne, żeby unikać takich pomyłek. Dobrze jest też zwrócić uwagę na wskaźniki i referencje, bo one umożliwiają modyfikację oryginalnych zmiennych, co ma swoje zastosowanie w bardziej skomplikowanych programach.