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