Free Pascal-ban Pointer elemeket tartalmazó tömböt miként töltök fel, illetve konstansként hogy adom meg az elemeit és miként hivatkozom az elemekre? (bővebben lent a program).
Ebben a példaprogramban az érdekelne, hogy például miként tudom rendezni az ilyen elemeket, valamint ha konstansként szeretném őket megadni, vagy ciklussal feltölteni a tömböt, ezt miként tegyem?
konstansként történő definiálásra is kérhetek példát? a tszam változót elég ha háromra teszitek, nem kell kézzel ilyen sok elemet megadni. :-)
Ez a fajta deklarálás miben jobb, előnyösebb, mint ha statikus vagy dinamikus tömböt használnék?
A mutatót ebben a programban mikor kell "nil" értékre állítani?
Program Ptomb;
Const
tszam = 20;
Type
TElem = ^Longint;
Var
tomb : Array[0..tszam] of TElem;
i,j,cs : Longint;
Begin
For i := 0 to tszam -1 do
begin
for j := i+1 to tszam do
begin
Itt hogyan tovább?
End;
End;
End.
Valamilyen Free Pascal Tutorial-ban azt olvastam hogy @ jellel kell az elemekre hivatkozni, de nem akar összejönni...
Ezért nem tudtam megírni a ciklus belsejét.
cs:=@tomb[i];
@tomb[i]:=@tomb[j];
@tomb[j]:=cs;
Ha a @ jelet a tomb és a [ közé teszem, akkor sem jó... Közben rájöttem hogy talán a "cs"-t is esetleg TElemként kellett volna definiálni, de gondolom hogy az I, j az maradhat sima longint, vagy esetleg itt is tévedek?
Hányféleképp lehet hivatkozni az elemekre mutatókkal?
Innen: [link]
Ez:
program exPointers;
const MAX = 3;
type
iptr = ^integer;
var
arr: array [1..MAX] of integer = (10, 100, 200);
i: integer;
parray: array[1..MAX] of iptr;
begin
(* let us assign the addresses to parray *)
for i:= 1 to MAX do
parray[i] := @arr[i];
(* let us print the values using the pointer array *)
for i:=1 to MAX do
writeln(' Value of arr[', i, '] = ' , parray[i]^ );
end.
Nem kell tömb, bárhol lehet az a szám:
program Mutatok;
const MAX = 4;
type
iptr = ^integer;
var i, j, i1, i2, i3, i4: integer;
parray: array[1..MAX] of iptr;
temp : iptr;
begin
i1 := 100;
i2 := 200;
i3 := 50;
i4 := 10;
parray[1] := @i1;
parray[2] := @i2;
parray[3] := @i3;
parray[4] := @i4;
Write(#10#13, 'Szamok: :');
for i := 1 to MAX do
Write(parray[i]^:5);
for i := MAX downto 1 do
begin
for j := 1 to i do
begin
if parray[j]^ > parray[j + 1]^ then
begin
temp := parray[j];
parray[j] := parray[j+1];
parray[j+1] := temp;
end;
end;
end;
Write(#10#13, 'Szamok rendezve: :');
for i := 1 to MAX do
Write(parray[i]^:5);
ReadLn;
end.
Talán így a példával érthetőbb.
Igen, így már érthetőbb.
Programozás szempontjából miért jobb ilyen tömböket használni, mint statikus vagy dinamikus tömböket, a memóriában gyorsabb a művelet a mutatózásokkal, mert mindegyik elem memóriacíme közvetlenül hozzáférhető (mintha ezt olvastam volna valahol) vagy nem igazán gyorsabb?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!