Webové aplikace | Informační systém pro školy | HR magazín | Celoživotní učení | Zábavný portál | Mzdová kalkulačka | Výpočet nemocenské | Seznam škol | BMI | Výpočet mateřské | Referáty | SuperMamina | Kalkulačky | Online hry | Mateřské školky | Spis szkół v PL | Kam na výlet | Zoznam škôl
Referáty, Seminárky, Čtenářské deníky, Maturitní otázky

Referáty, Seminárky, Čtenářské deníky, Maturitní otázky

Naleznete zde převážně informační materiály pro školáky. V databázi se nachází 4250 referátů.

Domů | Referáty | Seminární práce | Čtenářské deníky | Maturitní otázky | + Vložit dílo
 Doporučujeme

Trička s potiskem - vtipná trička s potiskem si můžete vyrobit i s vlastním motivem.

Střední školy - přehledný seznam středních škol.

Bazar pro maminky - staré i nové oblečení oblečení pro děti.


Střední školy

 Reklama


+ vložit vlastní dílo upravit toto dílo

Ukazatele v TP

Nejdříve úvodem, co je to pointer? Pointer je část paměti, která obsahuje adresu místa jiného výrazu. V Pascalu zpravidla pointer využíváme, chcemeli si uchovat adresu jiné proměnné, ať už normální nebo alokované.

 Reklama



Uchovávat si adresu normální proměnné nemá prakticky velký význam. My se zde budeme zabývat pouze alokovanými proměnnými.
Nejdříve se naučíme pracovat s ukazately. Můžeme je používat jako normální proměnné co se týče přiřazování pointeru pointer. Další operace se nechají provádět jen s ukazateli.
Ukazateli jako takovému můžeme přiřadit adresu nějakého výrazu. Používá se k tomu operátor @. Použití pak vypadá:

{-------------}
var p:pointer;
b:byte;

begin
p:=@b;
end.
{-------------}
Ukazatel nemusí být definován pouze jako Pointer. Můžeme ho definovat rovnou, že ukazuje na nějaký typ pomocí znaku ^.
{-------------}
var p:^byte;
{-------------}
Teď sice umíme do ukazatle proměnnou dostat, ale stále ještě neumíme s ní pracovat. My se na ni musíme odkázata to za pomoci již zmíněného znaku ^.
{-------------}
var p:pointer;
b,c:byte;

begin
b:=1;
p:=@b;
c:=p^;
end.
{-------------}
To nám umožní pracovat s pamětí, na kterou je ukazováno.

Nyní krátká ukázka:
Potřebujeme-li například nějaký textový editor a text bychom si rádi ponechávali v paměti v poli, snažíme se, aby bylo pole co největší. Pole si můžeme vytvořit jako globální, nebo lokální proměnnou, avšak ta se potom vytváří v segmentu alokovaném pro program, kde by se navzájem utlačovaly a došlo by k chybě:"Stack overflow error.". Pak-li ho alokujeme ukazatelem, místo se uvolní kdesi v základní paměti a my pro tuto proměnou můžeme uvlonit až 64kB. Nyní krátká ukázka alokace pole:

{-----------------------------------------------------------}
program alokujpole;
uses crt,dos;
const max=65530;
type tpole=array[1..max] of char;

var ppole:^pole;

begin
write('Pole zatim neni alokovane.');
readkey;
new(ppole);
fillchar(ppole^,max,100);
write('Nyni mame pole plne znaku o decimalni hodnote 100');
readkey;
dispose(ppole);
write('A ted uz zadne pole neni');
end.
{-----------------------------------------------------------}

V programu jsou používány funkce pro uvolnění a znovu navrácení paměti. My sice umíme pracovat s ukazateli, ale nevíme jak pro ně uvolnit paměť. Používáme proto procedury New a Dispose. Každá má za parametr ukazatel, který je definován tak, že ukazuje rovnou na nějaký typ. New paměť přidělí a Dispose ji uvolní.
Ještě jedna důležitá věc je, abychom nezapisovali do paměti, na kterou ukazuje nealokovaný ukazatel. Mohlo by dojít k restartu počítače a nebo nějaké závažné chybě. Proto, nealokovaným ukazatelům přiřazujeme konstantu:
{-----------------------}
var p:pointer;
begin
p:=nil; {Konstanta nil}
end;
{-----------------------}
Pak za pomocí jednoduché podmínky zjistíme, zda je paměť "naše".


+ vložit vlastní dílo upravit toto dílo
  Sdílet článek na: Facebook Facebook   MySpace MySpace   Linkuj Linkuj  

Rodinná vánoční trička = skvělý dárek
Střední školy - seznam středních škol
Střední odborné školy - seznam středních odborných škol
Bazar pro maminky - staré i nové oblečení oblečení pro děti.

 Reklama