KWALIFIKACJA INF3 - WRZESIEŃ 2014

PYTANIE NR 29.
Wskaż stwierdzenie, które nie jest prawdziwe dla następującej definicji funkcji w języku C++?
Ilustracja przedstawia fragment kodu w języku C++, który definiuje funkcję o nazwie 'zamien'.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W nagłówku widnieje typ zwrotny void, co w C++ oznacza, że funkcja nie zwraca wartości. Funkcja "zamien" ma dwa parametry typu float przekazywane przez referencję (znak &), aby mogła zmienić wartości argumentów. Dlatego fałszywe jest stwierdzenie: "Funkcja zwraca wartość."

Pełne wyjaśnienie:

W C++ o tym, czy funkcja zwraca wartość, decyduje jej typ zwrotny podany przed nazwą funkcji. Jeśli w definicji (nagłówku) występuje typ void, oznacza to, że funkcja nie zwraca żadnej wartości i nie można traktować jej wywołania jako wyrażenia dającego wynik (np. nie przypisuje się go do zmiennej).

W pokazanej definicji funkcji "zamien" widać także listę parametrów: są dokładnie dwa parametry typu float. Dodatkowo zapis & przy parametrach oznacza, że są one przekazywane przez referencję, czyli funkcja operuje na oryginalnych zmiennych podanych jako argumenty, a nie na ich kopiach. To jest typowe dla funkcji realizujących zamianę wartości (swap), bo celem jest zmiana wartości zmiennych wywołujących.

Dlatego:

  • Stwierdzenie "Funkcja zwraca wartość." jest nieprawdziwe, bo void wyklucza zwracanie wartości.
  • Stwierdzenie "Funkcja nie zwraca wartości." jest prawdziwe i wynika wprost z typu void.
  • Stwierdzenie "Funkcja posiada dwa parametry." jest prawdziwe, bo w nawiasach widnieją dwa parametry (x i y).
  • Stwierdzenie "Funkcja odwołuje się do parametrów przez referencję." jest prawdziwe, ponieważ zapis & w deklaracji parametru oznacza referencję.

Wskazówka egzaminacyjna: czytając nagłówek funkcji, najpierw sprawdź typ zwrotny (np. void/int), potem policz parametry, a na końcu zwróć uwagę na drobne znaki składni, takie jak &, które zmieniają sposób przekazywania danych.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
void oznacza, że funkcja nie zwraca żadnej wartości. Taka funkcja wykonuje działanie (np. modyfikuje stan programu lub argumenty), ale jej wywołania nie da się użyć jako wyniku w wyrażeniu, np. nie przypiszesz go do zmiennej.
Bo typ zwrotny jest częścią kontraktu funkcji. Gdy w nagłówku jest void, kompilator oczekuje braku wartości zwracanej. Można użyć return; do wcześniejszego wyjścia, ale nie wolno zwracać wyniku typu liczbowego czy obiektu.
Znak & w deklaracji parametru oznacza referencję. Parametr staje się aliasem na oryginalną zmienną przekazaną do funkcji, więc zmiany wykonane w funkcji dotyczą tej samej zmiennej, a nie jej kopii.
Liczbę parametrów odczytujesz z listy w nawiasach po nazwie funkcji. Każdy parametr jest oddzielony przecinkiem. Przykładowo zapis "(float &x, float &y)" oznacza dwa parametry: jeden o nazwie x i drugi o nazwie y.
Klasyczny swap używa zmiennej tymczasowej: najpierw zapisuje pierwszą wartość do "tmp", potem przypisuje drugą do pierwszej, a na końcu "tmp" do drugiej. Jeśli parametry są przekazane przez referencję, zmienią się oryginalne zmienne z miejsca wywołania.
Tak, ale to nie jest zwracanie wartości. Funkcja void może zmieniać argumenty przez referencję lub wskaźnik albo modyfikować zmienne globalne/obiekty. Wtedy "wynik" widzisz w zmienionym stanie danych po powrocie z funkcji.
Najczęstszy błąd to brak & w parametrach swap. Wtedy do funkcji trafiają kopie, a zamiana dotyczy tylko zmiennych lokalnych w funkcji. Po zakończeniu wywołania oryginalne zmienne w kodzie wywołującym pozostają bez zmian.
Nie. Wywołanie funkcji o typie zwrotnym void nie daje wartości, więc nie może stać po prawej stronie operatora przypisania. Jeśli potrzebujesz wartości do przypisania, funkcja musi mieć nie-void typ zwrotny (np. int, float, string).
W funkcji void można użyć return; bez wartości, aby zakończyć działanie wcześniej. W funkcji zwracającej wartość typowo używa się return wyrażenie;, gdzie wyrażenie ma typ zgodny z typem zwrotnym funkcji.
Ćwicz czytanie nagłówków funkcji: typ zwrotny, nazwa, liczba parametrów i sposób przekazywania (wartość, referencja, wskaźnik). Rozwiązuj krótkie zadania: swap, funkcje liczące i funkcje void modyfikujące argumenty, aby utrwalić różnice.
info

To pytanie poprawnie rozwiązuje 61% zdających egzamin. średnie

Według specjalistów z branży: "W nagłówku widnieje typ zwrotny void, co w C++ oznacza, że funkcja nie zwraca wartości."

Źródła:

  • cppreference.com: "void" (C++ keyword) — https://en.cppreference.com/w/cpp/keyword/void (dostęp: 2026-03-01)
  • cppreference.com: "References" — https://en.cppreference.com/w/cpp/language/reference (dostęp: 2026-03-01)
  • cppreference.com: "Function" / "Function declaration" — https://en.cppreference.com/w/cpp/language/function (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja cppreference: funkcje i parametry w C++
  • Dokumentacja cppreference: referencje w C++
  • Podręcznik/notesy do INF.3 z podstaw C/C++ (funkcje, parametry, referencje)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego