Junior
Opowiedz o różnicach między referencją a wskaźnikiem w języku C/C++.
sobes.tech AI
Odpowiedź od AI
Referencja może być traktowana jako alias dla istniejącego obiektu; wskaźnik zawiera adres pamięci obiektu.
| Charakterystyka | Referencja | Wskaźnik |
|---|---|---|
| Inicjalizacja | Musi być zainicjalizowana podczas deklaracji. | Może nie być zainicjalizowana. |
| Przypisanie ponowne | Nie może być przypisana ponownie po inicjalizacji. | Może wskazywać na inny obiekt. |
| Wartość null | Nie może być null. | Może być nullptr (C++11) lub NULL (C/C++). |
| Indeksowanie tablicy | Nie obsługuje bezpośredniej arytmetyki wskaźników. | Obsługuje arytmetykę wskaźników. |
| Operatory | Używana bezpośrednio (. dla członków). |
Używa * do dereferencji, -> dla członków. |
| Rozmiar | Nie ma własnego rozmiaru, odwołuje się do rozmiaru obiektu. | Ma rozmiar odpowiadający rozmiarowi adresu w systemie (zazwyczaj 4 lub 8 bajtów). |
| Przydział pamięci | Nie wymaga jawnego przydziału/zwolnienia pamięci. | Może wymagać new/delete (w C++). |
| Użycie | Często jako parametry funkcji do przekazywania przez referencję. | Do dynamicznego przydziału pamięci, niskopoziomowego dostępu. |
// Przykład użycia referencji
int x = 10;
int& ref = x; // ref jest aliasem dla x
ref = 20; // x teraz jest 20
// Przykład użycia wskaźnika
int y = 30;
int* ptr = &y; // ptr wskazuje na adres y
*ptr = 40; // y teraz jest 40
// Wskaźnik może być nullptr
int* null_ptr = nullptr;