Hei. Tarviiko FreePascalissa varata taulukoille muisti erikseen vai varaako FP sen automaattisesti?
Entä miten osoittimien muistinvaraus tapahtuu. Eli mikä määrittää mihin kohtaan muistia osoitin osoittaa, ja onko sille rajoja.
Kiitos
Entä miten osoittimien muistinvaraus tapahtuu. Eli mikä määrittää mihin kohtaan muistia osoitin osoittaa, ja onko sille rajoja.
Kiitos
Vastaukset 3
Vanhimmat
Peruskäytössä ei tarvi varata. Tapahtuu automaattisesti.
Osoittimillekin varataan muisti automaattisesti mutta sille tiedolle joka on osoittimen päässä on jo eri asia.
FreePascal käyttäjän kannattaa katsoa myös Delphi-keskustelualuetta. FreePascal ja Delphin kieli on Pascalia.
http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000646&subcat=1075
Tässä on yksinkertainen esimerkki taulukon käytöstä Pascal:ssa:
program yksinkertainentaulukkoproject1;
{$mode objfpc}{$H }
const // vakioiden määrittely
MIN_TAU = 0 ;
MAX_TAU = 5 ;
type // tyyppien esittely
tau = array[ MIN_TAU..MAX_TAU ] of integer;
procedure TaytaTaulukko( var atau:tau );
var
i,j:integer;
begin
j := 4 ;
for i := MIN_TAU to MAX_TAU do
begin
atau[i]:= j;
j := j 5;
end;
end;
procedure TulostaTaulukko( atu:tau );
var
i:integer;
begin
for i := MIN_TAU to MAX_TAU-1 do
begin
write( atu[i] );
Write( ' : ' );
end;
writeln( atu[MAX_TAU] );
end;
var
taulukko :tau;
begin
writeln( 'Taulukkoesimerkki' );
writeln;
TaytaTaulukko( taulukko );
TulostaTaulukko( taulukko );
writeln;
end.
Tota voisi parantaa käyttämällä
noissa aliohjelman esittelyissä var tilalla out viitettä eli se olisi
procedure TaytaTaulukko( out atau:tau );
koska kyseisestä aliohjelmasta tuodaan vain tietoa. (var:a käytetään silloin kun sinne viedään ja tuodaan)
Tuossa toisessa jossa ei ole määrittelyä (kun ei ole mitään niin kopioidaan parametrit
joita voidaan muuttaa. Mutta tuossahan ei muuteta niitä niin silloin parempi olisi const.
Const kertoo että aliohjelmassa ei muuteta tuon muuttujan arvoa)
eli näin
procedure TulostaTaulukko( const atu:tau );