KWALIFIKACJA INF2 + INF3 - CZERWIEC 2009

PYTANIE NR 29.
Przekazywanie parametrów funkcji przez tzw. referencję, pozwala tej funkcji na
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Przekazanie parametru przez referencję oznacza, że funkcja otrzymuje dostęp do tego samego obiektu/zmiennej, a nie jego kopii. Dzięki temu zmiany wykonane na parametrze w funkcji mogą zmienić wartość zmiennej użytej przy wywołaniu, czyli "na zewnątrz" funkcji. Pozostałe odpowiedzi nie wynikają z mechanizmu referencji.

Pełne wyjaśnienie:

Przekazywanie parametrów przez referencję (w wielu językach opisywane też jako "przez odwołanie") polega na tym, że do funkcji trafia nie kopia wartości, lecz odwołanie do istniejącej zmiennej/obiektu. W praktyce oznacza to, że parametr funkcji "wskazuje" na ten sam byt, którego użyto w wywołaniu.

Dlatego poprawne jest stwierdzenie: "modyfikowanie wartości zmiennych znajdujących się poza tą funkcją." Jeżeli funkcja zmieni przekazany parametr, to może zmienić również stan zmiennej po stronie wywołującej (np. zwiększyć licznik, uzupełnić strukturę, ustawić wynik w przekazanym argumencie).

Dlaczego pozostałe odpowiedzi są błędne?

  • "usuwanie zmiennych dynamicznych" – zwalnianie pamięci to osobny mechanizm (zarządzanie pamięcią), zależny od języka i sposobu alokacji. Sam fakt przekazania przez referencję nie "usuwa" nic automatycznie.
  • "przypisanie parametrom wartości typu rzeczywistego" – referencja nie dotyczy konkretnego typu (rzeczywistego) i nie narzuca konwersji. Parametry mogą mieć różne typy; istotą jest sposób przekazania (kopiowanie vs odwołanie), a nie typ liczbowy.
  • "komunikowanie się z drukarką" – to zagadnienie wejścia/wyjścia i sterowników/urządzeń, niezwiązane bezpośrednio z semantyką przekazywania argumentów do funkcji.

Wskazówka egzaminacyjna: jeśli w odpowiedziach pojawia się możliwość zmiany danych wywołującego, to jest to typowy skutek przekazania przez referencję (w odróżnieniu od przekazania przez wartość, gdzie modyfikowana jest tylko kopia).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
To sposób wywołania funkcji, w którym parametr odnosi się do tej samej zmiennej/obiektu co argument w miejscu wywołania, a nie do kopii. Dzięki temu zmiany wykonane w funkcji mogą być widoczne poza nią.
Zależy od języka: w C++ spotkasz zapis z & przy typie, w PHP znak & przy parametrze funkcji, a w C# słowa kluczowe ref/out/in. Na egzaminie zwracaj uwagę na te oznaczenia.
Bo funkcja pracuje na tym samym obiekcie/zmiennej, do której odwołuje się argument wywołania. Nie modyfikuje kopii, tylko "oryginał". To klasyczny przykład efektu ubocznego funkcji.
Przez wartość: funkcja dostaje kopię i zmiany nie wpływają na argument wywołania. Przez referencję: funkcja dostaje odwołanie do tej samej zmiennej/obiektu, więc modyfikacje mogą być widoczne po powrocie z funkcji.
Nie zawsze. Referencja bywa szybsza dla dużych struktur (mniej kopiowania), ale zwiększa ryzyko niezamierzonych zmian danych (efekty uboczne). Przez wartość bywa prostsze i bezpieczniejsze w rozumieniu zachowania funkcji.
Gdy funkcja ma celowo modyfikować przekazany obiekt, np. normalizować dane formularza, uzupełniać strukturę wyników lub aktualizować licznik. W praktyce częściej dotyczy to pracy na obiektach/strukturach danych niż na prostych liczbach.
Nie bezpośrednio. Zwalnianie pamięci zależy od mechanizmu zarządzania pamięcią (ręcznie lub przez garbage collector). Referencja jedynie określa, jak argument jest przekazywany do funkcji, a nie kiedy pamięć ma być zwolniona.
Najczęściej myli się referencję z przekazaniem przez wartość i zakłada brak wpływu na zmienną wywołującą. Częsty jest też błąd przenoszenia zasad między językami (np. inne zachowanie obiektów w JavaScript niż w C++).
W JavaScript argumenty prymitywne są przekazywane jak wartości, a obiekty są przekazywane jako wartość będąca referencją do obiektu (co daje efekt modyfikacji obiektu). Terminologia bywa myląca, dlatego w pytaniach ogólnych kluczowy jest skutek: możliwość zmiany danych poza funkcją.
Skup się na definicji ogólnej: referencja oznacza pracę na tym samym obiekcie/zmiennej co w miejscu wywołania. Najbardziej typową konsekwencją jest możliwość modyfikacji wartości "na zewnątrz" funkcji, a nie operacje na drukarce czy typach liczbowych.
info

Statystycznie 62% uczniów zna prawidłową odpowiedź. średnie

Specjaliści zwracają uwagę: "Przekazanie parametru przez referencję oznacza, że funkcja otrzymuje dostęp do tego samego obiektu/zmiennej, a nie jego kopii."

Źródła:

  • PHP Manual: Passing by reference, https://www.php.net/manual/en/language.references.pass.php - accessed 2026-03-02
  • cppreference.com: Reference declaration / reference type (podstawy referencji w C++), https://en.cppreference.com/w/cpp/language/reference - accessed 2026-03-02
  • Microsoft Learn: C# reference parameters (ref, out, in), https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref - accessed 2026-03-02

Materiały:

  • Dokumentacja języka używanego na zajęciach (sekcja o przekazywaniu argumentów)
  • Ćwiczenia: porównanie przekazania przez wartość i przez referencję na prostych przykładach
  • Materiały o zasięgu (scope) i efektach ubocznych funkcji

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego