Sobes.tech
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;