(***********************************) (* Dynamicke pole, pointer na pole *) (***********************************) program DemoDDS2; const DelkaPole = 10; type TPole = array[1..DelkaPole] of word; PWord = ^word; var SPole: TPole; { staticke pole prvku typu word } DPole: ^TPole; { pointer na dynamicke pole prvku typu word } ps, pd: PWord; { pointery na datovy typ word } i: integer; procedure Vymena(p1, p2: PWord); var w: word; begin w := p1^; p1^ := p2^; p2^ := w; end; begin { stav pameti pro promenne: - SPole 100 x 2 B = 200 B - DPole 4 B - ps 4 B - pd 4 B - i 2 B Celkem: 214 Byte } New(DPole); { od teto chvile existuje dynamicka promenna, na kterou ukazuje pointer DPole. Velikost teto dynamicke promenne je stejna jako velikost staticke promenne SPole } { stav pameti pro promenne: - SPole 100 x 2 B = 200 B - DPole 4 + 100 x 2 B = 204 B - ps 4 B - pd 4 B - i 2 B Celkem: 414 Byte } { naplnime obe pole cisly } for i := 1 to DelkaPole do begin SPole[i] := i; { 1, 2, 3, ... } DPole^[i]:= i*10; { 10, 20, 30, ... } end; { obe pole vypiseme } writeln; for i := 1 to DelkaPole do write(SPole[i]:4); writeln; for i := 1 to DelkaPole do write(DPole^[i]:4); writeln; ps := @SPole[1]; { pointer ps ukazuje na prvni prvek statickeho pole SPole } pd := @DPole^[1]; { pointer pd ukazuje na prvni prvek dynamickeho pole DPole^ } inc(ps); { pointer ps se posune o 1 prvek = 2 B dal v poli SPole } inc(pd); { pointer pd se posune o 1 prvek = 2 B dal v poli DPole^ } dec(ps); { ps ukazuje na 1. prvek pole SPole } ps^ := pd^; { do 1. prvku SPole se nacte obsah 2. prvku DPole^ } inc(ps,5); inc(pd,3); Vymena(ps,pd); { totez jako Vymena(@SPole[6],@(DPole^[5]); } writeln; for i := 1 to DelkaPole do write(SPole[i]:4); writeln; for i := 1 to DelkaPole do write(DPole^[i]:4); Dispose(DPole); DPole := nil; ps := nil; pd := nil; { stav pameti pro promenne: - SPole 100 x 2 B = 200 B - DPole 4 B - ps 4 B - pd 4 B - i 2 B Celkem: 214 Byte } readln; end.