KWALIFIKACJA INF3 - WRZESIEŃ 2014

PYTANIE NR 30.
Element zadeklarowany w języku C++ double *x; to
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
double *x; jest deklaracją zmiennej-wskaźnika: operator * w deklaracji oznacza "wskaźnik do", a double określa typ danych, na które wskaźnik wskazuje. Pozostałe odpowiedzi opisują zwykłe zmienne lub parametr funkcji, a nie wskaźnik zadeklarowany w tej linii.

Pełne wyjaśnienie:

W zapisie double *x; występują dwa kluczowe elementy: typ bazowy double oraz deklarator z operatorem *. W C++ operator * umieszczony w deklaracji (pomiędzy typem a identyfikatorem lub bezpośrednio przy typie) oznacza, że deklarowana nazwa jest wskaźnikiem. Dlatego x nie przechowuje wartości zmiennoprzecinkowej, tylko adres w pamięci, pod którym może znajdować się obiekt typu double.

Odpowiedź "wskaźnik." jest poprawna, bo dokładnie opisuje rezultat deklaracji: zmienną-wskaźnik do double (czyli typ "pointer to double"). W praktyce taki wskaźnik bywa używany np. do przekazywania danych przez adres, pracy z tablicami, buforami i dynamiczną alokacją.

  • "zmienna rzeczywista." byłaby poprawna dla deklaracji w rodzaju double x;, gdzie nie ma operatora *. Tutaj jednak * zmienia znaczenie deklaratora na wskaźnik.
  • "zmienna całkowita." jest niepoprawna, bo typ double nie jest typem całkowitym (takim jak int), tylko zmiennoprzecinkowym.
  • "parametr formalny typu rzeczywistego." dotyczy sytuacji w nagłówku funkcji (np. void f(double x)). Sama linia double *x; nie deklaruje parametru, tylko zmienną (najczęściej lokalną lub globalną, zależnie od miejsca w kodzie).

Wskazówka egzaminacyjna: odróżniaj * w deklaracji od * w wyrażeniu. W deklaracji oznacza "wskaźnik do", a w wyrażeniu (np. *x) oznacza dereferencję, czyli dostęp do wartości przechowywanej pod adresem.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Zapis double *x; deklaruje wskaźnik o nazwie x, który może wskazywać na obiekt typu double. Taka zmienna przechowuje adres w pamięci, a nie samą wartość zmiennoprzecinkową.
W deklaracji C++ operator * należy do deklaratora i informuje, że identyfikator jest wskaźnikiem. Poprawny zapis umieszcza * między typem a identyfikatorem (np. double *x;) lub przy typie (np. double* x;).
Wskaźnik poznasz po obecności * w deklaracji, np. double *x;. Zwykła zmienna ma postać double x;. Wskaźnik trzyma adres, a zmienna typu double trzyma bezpośrednio liczbę zmiennoprzecinkową.
Tak, oba zapisy deklarują wskaźnik do double. Różnica jest stylistyczna (spacje). W praktyce ważne jest, by pamiętać, że w deklaracji z wieloma nazwami (np. double* a, b;) tylko a jest wskaźnikiem, a b nie.
Dereferencja to użycie operatora * w wyrażeniu (np. *x), aby odczytać lub zapisać wartość pod adresem przechowywanym przez wskaźnik. To co innego niż * w deklaracji, gdzie tworzy się typ wskaźnikowy.
Wskaźnik do double przydaje się m.in. przy przekazywaniu argumentów przez adres (gdy funkcja ma zmienić wartość), w pracy na tablicach/buforach liczb zmiennoprzecinkowych oraz przy dynamicznej alokacji i strukturach danych operujących na adresach.
Typ double dotyczy liczb zmiennoprzecinkowych, a nie całkowitych. Dodatkowo obecność * oznacza, że x przechowuje adres (wskaźnik), więc nie jest to ani "zmienna całkowita", ani "zmienna rzeczywista" w sensie przechowywania samej wartości.
Parametr formalny jest częścią nagłówka funkcji, np. void f(double x). Linia double *x; sama w sobie jest deklaracją zmiennej, nie parametru funkcji. Brakuje tu kontekstu deklaracji funkcji (nawiasów i listy parametrów).
Najczęstsze to: mylenie * w deklaracji z dereferencją w wyrażeniu, błędne rozmieszczenie operatora * oraz brak inicjalizacji wskaźnika (użycie nieustawionego adresu). Na egzaminie warto sprawdzić, czy pytanie dotyczy deklaracji czy użycia wskaźnika.
Wyszukaj operator * w deklaracji obok typu lub przed identyfikatorem (np. double *x;). Jeśli jest, to identyfikator jest wskaźnikiem. Jeśli nie ma * (np. double x;), to jest to zwykła zmienna przechowująca wartość typu double.
info

Około 77% zdających odpowiada poprawnie na to pytanie. średnio łatwe

W praktyce zawodowej kluczowe jest to, że double *x; jest deklaracją zmiennej-wskaźnika: operator * w deklaracji oznacza "wskaźnik do", a double określa typ danych, na które wskaźnik wskazuje.

Źródła:

  • cppreference.com – "Declarations" (składnia deklaracji i deklaratory), https://en.cppreference.com/w/cpp/language/declarations (dostęp: 2026-03-13)
  • cppreference.com – "Pointers" (wskaźniki w C++), https://en.cppreference.com/w/cpp/language/pointer (dostęp: 2026-03-13)
  • Working Draft C++ (eel.is) – rozdział o deklaracjach (dcl.decl), https://eel.is/c++draft/dcl.decl (dostęp: 2026-03-13)

Materiały:

  • Dokumentacja cppreference: sekcje o deklaracjach i wskaźnikach
  • Materiały kursowe z podstaw C++: deklaracje, typy, wskaźniki
  • Ćwiczenia: rozpoznawanie poprawnych i błędnych deklaracji (np. T* p, T *p, T p*)

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego