Sobes.tech
Junior

Povězte o rozdílech mezi odkazem a ukazatelem v jazyce C/C++.

sobes.tech AI

Odpověď od AI

Odkaz lze považovat za alias pro existující objekt; ukazatel obsahuje adresu paměti objektu.

Charakteristika Odkaz Ukazatel
Inicializace Musí být inicializován při deklaraci. Může být neinicializován.
Přepisování Nemůže být přepsán po inicializaci. Může ukazovat na jiný objekt.
Nulová hodnota Nemůže být null. Může být nullptr (C++11) nebo NULL (C/C++).
Indexace pole Nepodporuje přímo aritmetiku ukazatelů. Podporuje aritmetiku ukazatelů.
Operátory Používá se přímo (. pro členy). Používá * pro dereferenci, -> pro členy.
Velikost Nemá vlastní velikost, odkazuje na velikost objektu. Má velikost odpovídající velikosti adresy v systému (obvykle 4 nebo 8 bajtů).
Alokace paměti Nevyžaduje explicitní alokaci/uvolnění paměti. Může vyžadovat new/delete (v C++).
Použití Často jako parametry funkcí pro předání odkazem. Pro dynamickou alokaci paměti, nízkoúrovňový přístup.
// Příklad použití odkazu
int x = 10;
int& ref = x; // ref je alias pro x
ref = 20;     // x je nyní 20

// Příklad použití ukazatele
int y = 30;
int* ptr = &y; // ptr ukazuje na adresu y
*ptr = 40;    // y je nyní 40

// Ukazatel může být nullptr
int* null_ptr = nullptr;