KWALIFIKACJA INF2 + INF3 - CZERWIEC 2008

PYTANIE NR 24.
Co zostanie przypisane do wskaźnika p po wykonaniu inicjalizacji
char znak = 'A';
char *p = &znak;
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Wyrażenie &znak zwraca adres pamięci zmiennej znak. Ponieważ p ma typ char*, można go zainicjalizować adresem zmiennej typu char. Po tej instrukcji p przechowuje adres, pod którym znajduje się znak 'A', a nie samą wartość ani typ.

Pełne wyjaśnienie:

W kodzie zadeklarowano zmienną znak typu char o wartości 'A'. Następnie zadeklarowano wskaźnik p typu char* i zainicjalizowano go wyrażeniem &znak.

Operator & w tym kontekście jest operatorem pobrania adresu (address-of). Jego wynikiem jest adres pamięci, pod którym przechowywana jest dana zmienna. Dlatego poprawne jest stwierdzenie, że do p zostaje przypisany adres zmiennej znak.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • "Wartość zmiennej znak." Wartością jest 'A' (typ char). Wskaźnik char* nie ma przechowywać samego znaku, tylko adres miejsca w pamięci. Przypisanie "p = znak" (bez &) prowadziłoby do niezgodności typów.
  • "Typ zmiennej znak." Typ (char) jest informacją znaną kompilatorowi na etapie kompilacji, nie jest "przypisywany" do zmiennej w czasie wykonania. Do zmiennych przypisuje się wartości, a nie typy.
  • "Adres wskaźnika p." Adres samego wskaźnika uzyskuje się przez &p, a nie przez &znak. To częste pomylenie: &znak wskazuje na zmienną, a &p wskazuje na wskaźnik.

Wskazówka egzaminacyjna: rozróżniaj pary &zmienna (adres zmiennej) i *wskaznik (wartość pod adresem). W tym zadaniu pytanie dotyczy inicjalizacji wskaźnika, więc szukasz odpowiedzi o adresie.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Wskaźnik to zmienna, której wartością jest adres pamięci innej zmiennej. Np. char* może przechowywać adres zmiennej typu char. Dzięki temu można odwoływać się do danych pośrednio i modyfikować je przez dereferencję.
Operator & użyty przed nazwą zmiennej oznacza "pobierz adres". Wyrażenie &znak zwraca adres miejsca w pamięci, gdzie przechowywana jest zmienna znak. To nie jest wartość znaku, tylko informacja "gdzie leży".
p ma typ char*, czyli ma przechowywać adres do char. Wyrażenie &znak ma typ "wskaźnik do char", bo znak jest typu char. Zgodność typów sprawia, że inicjalizacja jest poprawna.
Nie wprost. Wskaźnik (np. char*) oczekuje adresu, a wartość znaku 'A' jest typu char. Przypisanie bez & zwykle powoduje błąd niezgodności typów. Najpierw potrzebujesz adresu, a potem możesz odczytać wartość przez *p.
Wyrażenie *p to dereferencja, czyli odczyt wartości spod adresu przechowywanego w p. Skoro p wskazuje na znak, to *p zwróci wartość zmiennej znak, czyli 'A' (o ile wskaźnik jest poprawny).
&znak to adres zmiennej typu char. Natomiast &p to adres samego wskaźnika p (zmiennej przechowującej adres), czyli ma typ char**. To dwa różne obiekty w pamięci: dana i wskaźnik do danej.
Najczęściej dlatego, że w kodzie oba pojęcia występują blisko siebie: znak (wartość) i &znak (adres). Dodatkowo adres jest "niewidoczny" w codziennym programowaniu, więc intuicyjnie wybiera się odpowiedź o wartości, bo jest bardziej zrozumiała.
Wskaźniki spotkasz m.in. przy pracy z tablicami i napisami w stylu C, przy przekazywaniu danych do funkcji, w strukturach danych (np. listy), oraz w kodzie niskopoziomowym związanym z buforami. W nowoczesnym C++ często stosuje się też inteligentne wskaźniki.
W debuggerze możesz podejrzeć wartość p (zwykle jako adres w postaci heksadecymalnej) oraz wartość *p (dane pod adresem). To dobry sposób, by zobaczyć różnicę między "gdzie" (adres) a "co" (wartość) w pamięci.
Częsta pułapka to pomylenie deklaracji wskaźnika (char *p) z dereferencją (*p) oraz pomylenie &zmienna z &wskaznik. Na egzaminie zawsze sprawdź, czy pytanie dotyczy adresu, wartości, czy typu, i dopasuj operator.
info

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

Według specjalistów z branży: "Wyrażenie &znak zwraca adres pamięci zmiennej znak."

Źródła:

  • ISO/IEC 14882:2020, Programming Languages — C++ (opis operatora address-of i typów wskaźnikowych)
  • cppreference.com: "Built-in address-of operator", https://en.cppreference.com/w/cpp/language/operator_member_access - dostęp 2026-02-28
  • cppreference.com: "Pointer declaration", https://en.cppreference.com/w/cpp/language/pointer - dostęp 2026-02-28

Materiały:

  • Dokumentacja cppreference dotycząca operatorów i wskaźników
  • Podręcznik do podstaw C++ obejmujący wskaźniki i pamięć
  • Zadania praktyczne: inicjalizacja wskaźników i dereferencja na prostych przykładach

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego