Junior
Povedzte o rozdieloch medzi odkazom a ukazovateľom v jazyku C/C++.
sobes.tech AI
Odpoveď od AI
Odkaz možno považovať za alias pre existujúci objekt; ukazovateľ obsahuje adresu pamäti objektu.
| Charakteristika | Odkaz | Ukazovateľ |
|---|---|---|
| Inicializácia | Musí byť inicializovaný pri deklarácii. | Môže byť neinicializovaný. |
| Prepisovanie | Nemôže byť prepísaný po inicializácii. | Môže ukazovať na iný objekt. |
| Null hodnota | Nemôže byť null. | Môže byť nullptr (C++11) alebo NULL (C/C++). |
| Indexovanie poľa | Nepodporuje priamo aritmetiku ukazovateľov. | Podporuje aritmetiku ukazovateľov. |
| Operátory | Používa sa priamo (. pre členov). |
Používa * na dereferenciu, -> pre členy. |
| Veľkosť | Nemá vlastnú veľkosť, odkazuje na veľkosť objektu. | Má veľkosť zodpovedajúcu veľkosti adresy v systéme (zvyčajne 4 alebo 8 bajtov). |
| Alokácia pamäte | Nevyžaduje explicitnú alokáciu/uvoľnenie pamäte. | Môže vyžadovať new/delete (v C++). |
| Použitie | Často ako parametre funkcií na odovzdanie odkazom. | Na dynamickú alokáciu pamäte, nízkoúrovňový prístup. |
// Príklad použitia odkazu
int x = 10;
int& ref = x; // ref je alias pre x
ref = 20; // x je teraz 20
// Príklad použitia ukazovateľa
int y = 30;
int* ptr = &y; // ptr ukazuje na adresu y
*ptr = 40; // y je teraz 40
// Ukazovateľ môže byť nullptr
int* null_ptr = nullptr;