# Ukazatele a pole ## Objekt, identita, adresa ### Objekt │ • buňka pro uložení hodnoty │ • typicky skrze proměnnou │ • má identitu │ • nemá pevnou adresu x ### Identita objektu │ • identita je abstraktní │ • výpočet nad identitami? │ ◦ předání (identity) objektu │ ◦ indexace │ • realizace adresou x ### Adresa │ • číselné označení buňky │ • adresu lze vypočítat │ • označuje «slabiky»/slova │ ◦ «nikoliv hodnoty» jazyka │ ◦ čtení/zápis z/na adresu x ### Adresa vs identita │ • jak reprezentovat identitu │ • adresa prvního bajtu │ • co objekt v registru? │ • co přesun objektu x ### Ukazatel │ • identita jako hodnota │ • načti/zapiš «hodnotu» │ ◦ nikoliv slabiku/slovo x ### Typ ukazatele │ • obsahuje «typ objektu» │ • zapisujeme ‹typ *› │ • existuje pro každý typ │ • kolik různých typů? x ### Operátor adresy │ • nový tvar výrazu – ‹&var› │ • pracuje s «objektem» │ • výsledek je «ukazatel» │ • použití «fixuje» adresu objektu Adresa ~ reprezentace identity. ### Operátor dereference ‹*› │ • nové tvary výrazů │ ◦ ‹*e₁› – výsledek je «objekt» │ ◦ ‹*e₁ = e₂› (nepřímé přiřazení) │ • objekt vs hodnota │ ◦ l-hodnota vs r-hodnota │ ◦ l-kontext vs r-kontext Identity ‹&*›, ‹*&›. ### Platnost ukazatele │ • platná adresa ≠ platný ukazatel │ • «musí» ukazova na objekt │ • typ ukazatele = typ objektu │ • vstupní podmínka dereference x ### Výstupní parametr │ • realizace ukazatelem │ • ‹void foo( int *out )› │ • ‹out› → kam zapsat výsledek │ • volající odpovídá za objekt x ## Přetypování ### Přetypování aritmetických typů ### Přetypování ukazatelů ### Typy a objekty XXX vznik objektu zápisem do pole bajtů