vypracovani temat z 3. prednasky
This commit is contained in:
51
Reference.md
Normal file
51
Reference.md
Normal file
@@ -0,0 +1,51 @@
|
||||
Reference je v podstatě jako **konstantní ukazatel** s jistými omezeními:
|
||||
|
||||
- musí být inicializována při vytvoření
|
||||
- nemůže být null
|
||||
- nedá se měnit, kam ukazuje (stejně jako konst. uk.) a neumí aritmetiku
|
||||
|
||||
**Používá se jako normální proměnná se jménem (bez \*)**
|
||||
|
||||
Zásadní mentální rozdíl taky můžeme hledat v tom, co to vlastně je. Ukazatel je proměnná s adresou v paměti, zatímco reference je alias pro objekt/proměnnou.
|
||||
|
||||
```
|
||||
int x = 5; # nějaká proměnná x
|
||||
|
||||
int& r = x; #inicializace reference, musí mít hodnotu.
|
||||
#int& r; #není možné
|
||||
|
||||
int* p; # ukazatel to umí - pro srovnání
|
||||
p = &x;
|
||||
```
|
||||
|
||||
Referenci nelze přesměrovat na jinou adresu/proměnnou
|
||||
```
|
||||
int a = 1;
|
||||
int b = 2;
|
||||
|
||||
int* p = &a; #ukazatel ukazuje na a
|
||||
p = &b; # ukazatel ukazuje na b
|
||||
|
||||
int& r = a; #reference ukazuje na a
|
||||
r = b; #reference nabírá hodnoty b, teď a = b
|
||||
# a = b; je ekvivalentní
|
||||
```
|
||||
|
||||
- Reference nemá vlastní adresu, není to proměnná a nebo objekt. Pokud se pokusím získat adresu reference, dostanu adresu objektu, na který ukazuje.
|
||||
|
||||
K čemu to je dobré?
|
||||
- stále můžu používat referenci na předání funkci. **To je hlavní důvod existence referencí - bezpečnější a čitelnější předávání parametrů místo ukazatelů.**
|
||||
```
|
||||
void increment(int& r)
|
||||
{
|
||||
r++; #melo by zvysit jakoukoli promennou, co je predana jako parametr
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int x = 42;
|
||||
increment(x); #zde predam proste puvodni promennou
|
||||
}
|
||||
```
|
||||
|
||||
- **Je to omezenější než ukazatel a proto je tu menší šance, že se uživatel střelí do nohy. Když to stačí, mělo by se to používat místo ukazatele. Doporučuje se to.**
|
||||
Reference in New Issue
Block a user