|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1365
|
[pascal] Passare dei dati alle procedure.
Ho una procedura che deve generare una serie di risultati, facciamo ad esempio i numeri tra due intervalli::
procedure tform.numeri(min,max:integer); var a; begin a:=min; while a <> max do begin a:=a+1 end; end; Come faccio a fare in modo che senza usare un array globale, la procedura chiamante abbia i risulati ? Non posso usare un array o un puntatore dichiarato globalmente perchè quando le procedure sono tante e complesse, diventa molto problematico riusarle in altri programmi facendo un semplice copia/incolla. Esiste un modo ? Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1365
|
Mi è venuta un 'idea ma non so se è la soluzione diciamo così 'ufficiale'.
Nella procedura chiamante costruisco un puntatore e lo passo alla funzione chiamata. Questa modifica i dati puntati o ne crea di nuovi e poi ritorna. La procedura chiamante dispone ora dei risulati, li usa e poi distrugge il puntatore. A questo punto la memoria si è effettivamente liberata oppure no ? E' lecito passare ad una funzione un puntatore ? |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1365
|
Nel caso servisse mai a qualcuno, ci sono riuscito.
type pQueue = ^tqueue; tQueue = record data: integer; next: pQueue; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var ddd: pQueue; a:integer; i: pointer; begin i:=Calcola(); new(ddd); ddd:=i; a:=0; while ddd^.next <> nil do begin memo1.Text:=memo1.Text+inttostr(ddd^.data)+' '; ddd:=ddd^.next; end; dispose(ddd); end; function TForm1.Calcola(): pointer; var dde,ddc: pQueue; a:integer; b: pointer; begin new(dde); b:=dde; for a:= 1 to 10 do begin dde^.data:=a; new(ddc); dde^.next:=ddc; dde:=ddc; end; dde^.next:=nil; result:= b; end; Occhio che poi vanno distrutti tutti i puntatori creati. Ultima modifica di das : 22-10-2007 alle 15:04. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:47.