Newsgroup: it.comp.lang.delphi
Titolo: Passaggio parametri con puntatori

Scusate l'ignoranza.
Ho un dubbio riguardo i puntatori.
Ho letto che utilizzare i puntatori è utile per "risparmiare fatica"
alla nostra macchina e rendere il programma più leggero.
Volendo fare un pò di pratica a riguardo mi è sorto il dubbio:
Per giovare dei benefici derivanti dall'utilizzo dei puntatori, basta
passare per parametro ad una funzione, il valore contenuto dal
puntatore stesso?
Oppure è anche necessario che il parametro richiesto dalla funzione
sia di tipo puntatore?
Mi spiego con un'esempio banale:
	type
 		TPListView = ^TListView;
	var
  		ArrayListView: array[1..100] of TPListView;
Per poter sfruttare i benefici del puntatore devo fare un lavoro del
genere:
	MiaFunz(ArrayListView[Indice]^);
dove MiaFunz è dichiarata nel seguente modo
	MiaFunz(LV: TListView);
oppure
	MiaFunz(ArrayListView[Indice]);
dove MiaFunz è dichiarata nel seguente modo
	MiaFunz(LV: TPListView);
Spero di essere stato più chiaro possibile.
Grazie e scusate ancora la banalità della domanda.


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

 Ciň che hai letto č vero, ma forse occorre fare alcune semplificazioni.
Innanzi tutto grazie mille per la chiarissima spiegazione che mi č
stata molto utile.
Farň tesoro delle sue parole.
Perň mi sfugge ancora qualcosa...
Se io ho bisogno di un'array di componenti? 
Ricordo che VB lo faceva automaticamente ma Delphi no giusto?
mi devo creare io un'array di puntatori a tale tipo di oggetto,
giusto?
Ammesso che quanto detto da me sopra sia giusto, nel momento in cui
devo passare tale array di puntatori come mi devo comportare (mi
riferisco agli esempi fatti nel primo mio post)?
La ringrazio... lei e chiunque voglia chiarirmi le idee.

 
Cioč il concetto č che se io scrivo
MiaFunz(ArrayListView[Indice]^);
dove MiaFunz č dichiarata nel seguente modo
 MiaFunz(CONST LV: TListView);
oppure
 MiaFunz(ArrayListView[Indice]);
dove MiaFunz č dichiarata nel seguente modo
 MiaFunz(LV: TPListView);
ottengo lo stesso risultato parlando di prestazioni?

 La ringrazio... lei e chiunque voglia chiarirmi le idee.
Prego...ma dammi pure del *tu*! :-)


Prego...ma dammi pure del *tu*! :-)
Insisto col dire che il tuo vero lavoro dovrebbe essere il teacher, altro che
il programmatore!
 ^_____^
-- 
Morde. 
(
mo...@despammed.com
)

 ottengo lo stesso risultato parlando di prestazioni?
Apparentemente sì, anzi secondo me creare "puntatori a puntatori" è
un'operazione inutile e porta alla scrittura di codice poco
comprensibile e abbastanza prono a errori.
Poi, non credo che a questo livello il guadagno prestazionale sia
elevatissimo...io punterei alla chiarezza.
Quando inserisci una ListView sul form, il campo privato "ListView1" che
viene aggiunto è già un puntatore che contiene un riferimento
all'oggetto ListView.
Per inserire più ListView in un array, ti basta dichiararlo come:
type
  TListViewArray = array of TListView.
Io uso pochissimo gli array, preferisco usare le liste (TList), sempre
per semplificare maggiormente il codice nella forma.


   TListViewArray = array of TListView.
non avviene la stessa cosa? cosa cambia?
Comuque grazie per la spiegazione, effettivamente dovevi fare il
professore... sei chiarissimo quando spieghi.

 professore... sei chiarissimo quando spieghi.
Non ricordavo che i professori fossero particolarmente chiari nelle
spiegazioni. :-D
Comunque grazie. ;-)


 vedo nulla di male nell'utilizzare un array e inserirvi riferimenti di
[]
Senza dimenticare che TList e' una lista solo di nome.
L'implementazione e' proprio un array, con i tipici vantaggi di questo
(memoria, rapido accesso agli elementi) e, in piu', la non necessita' di
predefinirne le dimensioni (il metodo Add si preoccupa della allocazione
di altro spazio alla bisogna).
Saluti
Paolo Arosio
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare"