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;