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

Smazaný obsah Přidaný obsah
článek pointerová aritmetika přidán sem do pointerů viz. stejně jako na en wiki, tam taky mají jen redirect z pointer aritmethic na pointer
Slady (diskuse | příspěvky)
zrušeny zbytečné nadpisy, trochu rozšířen příklad
Řádek 12:
Tento způsob práce s pamětí (respektive segmentace paměti) se používal v dobách 16-[[bit]]ových aplikací pro [[Disk Operating System|DOS]], dnes je ale považován za zastaralý a na architektuře [[x86|x86-32]] se používá výhradně 32-[[bit]]ových ukazatelů, respektive na 64-bitových architekturách se používá 64-bitových ukazatelů.
 
== PříkladPointerová aritmetika ==
Pointerová aritmetika definuje možné výpočetní operace s [[Ukazatel (informatika)|ukazateli (pointery)]]. [[Adresa (programování)|Adresovatelnou]] jednotkou ukazatele může být 1jeden [[byte]] nebo 1jedno [[slovo (paměťová jednotka)|slovo]], ale nejčastěji ve [[VPJprogramovací jazyk|vyšších programovacích jazycích]] je adresovatelnou jednotkou ukazatele velikost [[datový typ|datového typu]], který ukazatel adresuje.
=== [[C (programovací jazyk)|Jazyk C]] ===
int i; // definice proměnné i datového typu int
int *p; // definice proměnné p, ukazatele na datový typ int
p = &i; // hodnota pointeru je nastavena na adresu proměnné i
*p = 3; // do paměti na adresu odkazovanou ukazatelem p se uloží hodnota 3
 
Možné operace s ukazateli jsou buď přírůstek adresy P anebo(čili indexace prvků v [[Pole_pole (informatika)|poli]], na jehož počátek P ukazuje), anebo rozdíl adres P, adresa(vzdálenost dvou prvků v poli). seObě změnítyto ooperace ''n''pracují v násobcích velikosti [[datový typ|datového typu]].
==Pointerová aritmetika==
Pointerová aritmetika definuje možné výpočetní operace s [[Ukazatel (informatika)|ukazateli (pointery)]]. [[Adresa (programování)|Adresovatelnou]] jednotkou ukazatele může být 1[[byte]] nebo 1[[slovo (paměťová jednotka)|slovo]], ale nejčastěji ve [[VPJ|vyšších programovacích jazycích]] je adresovatelnou jednotkou ukazatele velikost [[datový typ|datového typu]], který ukazatel adresuje.
 
Adresy ukazatelů se kterými provádímese pointerovouprovádí aritmetikupointerová aritmetika se musí nacházet ve stejném adresovém prostoru (např. poli), jinak nemusí být výsledek operace definován.
===Možné operace s ukazateli===
 
===Příklad v [[C (programovací jazyk)|Jazykjazyku C]] ===:
přírůstek adresy P anebo indexace prvků v [[Pole_(informatika)|poli]] na jehož počátek ukazuje P, adresa se změní o ''n'' v násobcích velikosti [[datový typ|datového typu]]
int i; // definice proměnné i datového typu int
 
int a[3]; // definice proměnné a, pole typu int se třemi prvky
P' = P + n
int *p; // definice proměnné p, ukazatele na datový typ int
 
p = &i; // hodnota pointeru je nastavena na adresu proměnné i
rozdíl adres P a P', vzdálenost dvou prvků v poli (v násobcích velikosti [[datový typ|datového typu]])
*p = 3; // do paměti na adresu odkazovanou ukazatelem p se uloží hodnota 3
 
p = &(a[2]); // hodnota pointeru je nastavena na prvek pole a s indexem 2
n = |P - P'|
p = p - 2; // hodnota pointeru je nastavena na prvek pole a s indexem 0 (tj. první prvek pole)
 
*p = 5; // do paměti na adresu odkazovanou p se uloží hodnota 5 (tedy první prvek pole má tuto hodnotu)
===Poznámky===
 
Adresy ukazatelů se kterými provádíme pointerovou aritmetiku se musí nacházet ve stejném adresovém prostoru (např. poli), jinak nemusí být výsledek operace definován.
 
[[Kategorie:Programování]]