Który operator w języku C++ jest używany do uzyskiwania adresu zmiennej?
A.
&B.
>C.
*D.
deleteOperator & w języku C++ służy, w kontekście wyrażenia, do pobrania adresu obiektu w pamięci. Jeśli mamy zmienną int liczba = 10;, to zapis int* wsk = &liczba; oznacza: utwórz wskaźnik na int i wpisz do niego adres zmiennej liczba. To jest bardzo ważne przy pracy ze wskaźnikami, przekazywaniu danych do funkcji przez adres, obsłudze struktur danych oraz w starszym stylu programowania systemowego. Moim zdaniem warto od razu kojarzyć &: adres zmiennej, a *: dostęp do wartości pod adresem, bo te dwa operatory często występują razem. Przykład praktyczny: void zwieksz(int* p) { (*p)++; } można wywołać jako zwieksz(&liczba); i wtedy funkcja modyfikuje oryginalną zmienną, nie kopię. W nowoczesnym C++ często preferuje się referencje, inteligentne wskaźniki i kontenery standardowe, zgodnie z dobrymi praktykami C++ Core Guidelines, ale rozumienie operatora & dalej jest podstawą. Bez tego ciężko ogarnąć pamięć, wskaźniki, tablice dynamiczne czy interfejsy niskopoziomowe.
W tym pytaniu łatwo pomylić kilka operatorów, bo w C++ symbole są krótkie i zależą od kontekstu. Symbol * bardzo często pojawia się obok wskaźników, więc uczniowie czasem zakładają, że to on pobiera adres zmiennej. Tak naprawdę * w deklaracji, na przykład int* p, oznacza zmienną wskaźnikową, a w wyrażeniu, na przykład *p, wykonuje dereferencję, czyli przejście z adresu do wartości przechowywanej pod tym adresem. To odwrotny kierunek niż pobieranie adresu. Z mojego doświadczenia ten błąd bierze się z uczenia się składni na pamięć, bez rysowania sobie relacji: zmienna, jej adres i wskaźnik. Operator > jest operatorem porównania, zwraca wynik logiczny, np. x > 5, i nie ma nic wspólnego z adresem pamięci. Może być też elementem składni szablonów, ale nadal nie służy do pobierania adresu. Słowo kluczowe delete zwalnia pamięć zaalokowaną przez new, więc dotyczy zarządzania czasem życia obiektu, a nie uzyskiwania adresu. Dobra praktyka w nowoczesnym C++ mówi, żeby rzadziej używać ręcznego new i delete, a częściej std::unique_ptr, std::shared_ptr albo zwykłych obiektów automatycznych. Adres zmiennej pobieramy operatorem &, pamiętając, że ten sam znak w innym kontekście może oznaczać referencję albo bitowy AND, więc zawsze trzeba patrzeć na całe wyrażenie, nie tylko na pojedynczy symbol.