Ukazatel (programování): Porovnání verzí

Smazaný obsah Přidaný obsah
m link fix
Formulace úvodu
Řádek 1:
'''Ukazatel''' (angl. {{Vjazyce2|en|''pointer''}}) je v [[Informatika|informatice]] označení pro [[datový typ]], který slouží k uložení [[Adresa (programováníinformatika)|adresy]] v [[operační paměť|paměti počítače]]. Ukazatel slouží pro zpřístupnění [[Data|dat]], která jsou na příslušné adrese v operační paměti uložena.
 
== Charakteristika ==
Ukazatel používá většina [[Imperativní programování|imperativních]] [[programovací jazyk|programovacích jazyků]], jako např. [[C (programovací jazyk)|jazyk C]] a [[Pascal (programovací jazyk)|Pascal]]. V programovacích jazycích je syntaxí zápisu programu rozlišeno, zda se pracuje s hodnotou adresy ukazatele anebo s hodnotou datového prvku, na který ukazuje.
 
Zvláště významný je tento datový typ v [[C (programovací jazyk)|jazyku C]], který definuje i tzv. ''pointerovou aritmetiku'' (viz níže), díky které lze např. provést výpočet adres různých prvků v [[Pole (informatikadatová struktura)|poli]], nebo naopak z jejich adresy odvodit jejich index. Jazyk C téměř nerozlišuje mezi ukazatelem a polem a dokonce nemá ani datový typ [[Textový řetězec|řetězec]] a nahrazuje jej právě ukazatelem na jeho počátek, resp. s ním pracuje jako s polem znaků.
 
Při používání ukazatelů často dělají programátoři mnoho [[programátorská chyba|programátorských chyb]]. V novějších programovacích jazycích, jako například [[Java (programovací jazyk)|Java]] a [[Python]], jsou proto ukazatele nahrazeny [[Reference (programování)|referencemi]] na [[objektově orientované programování|objekty]], jejichž použití není tolik náchylné k programátorským chybám.
 
== Typy ukazatelů ==
V architektuře procesorů [[x86]], kde se používá [[adresaAdresa (programováníinformatika)|adresa]] dělená na [[adresaAdresa (programováníinformatika)#Operační paměť|segment a offset]], je možné volit mezi dvěma typy ukazatelů:
* '''blízký ukazatel''' (near pointer) – obsahuje jen lineární adresu (offset), a neobsahuje identifikaci (číslo) segmentu
* '''vzdálený ukazatel''' (far pointer) – obsahuje identifikaci (číslo) segmentu i lineární adresu (offset)
Řádek 15 ⟶ 16:
 
== Pointerová aritmetika ==
Pointerová aritmetika definuje možné výpočetní operace s ukazateli. [[Adresa (programováníinformatika)|Adresovatelnou]] jednotkou ukazatele může být jeden [[bytebajt]] nebo jedno [[slovo (paměťová jednotka)|slovo]], ale nejčastěji ve [[programovací jazyk|vyšších programovacích jazycích]] je adresovatelnou jednotkou ukazatele velikost [[datový typ|datového typu]], který ukazatel adresuje.
 
Možné operace s ukazateli jsou buď přírůstek adresy P (čili indexace prvků v [[polePole (informatikadatová struktura)|poli]], na jehož počátek P ukazuje), anebo rozdíl adres P (vzdálenost dvou prvků v poli). Obě tyto operace pracují v násobcích velikosti [[datový typ|datového typu]].
 
Adresy ukazatelů se kterými se provádí pointerová aritmetika se musí nacházet ve stejném adresovém prostoru (např. poli), jinak nemusí být výsledek operace definován.