Newsgroup: it.comp.lang.pascal
Titolo: Puntatori

Ciao a tutti, vorrei porvi una domanda a cui non sono ancora riuscito a dare
una risposta esauriente.
A cosa servono i puntatori?
Molti mi dicono per risparmiare memoria... per rendere il programma più
leggibile... ma che! io con i puntatori mi confondo di più.
Potreste farmi un esempio di codice (non tanto complesso) in cui non ci
siano i puntatori, seguito da uno uguale con in puntatori, in modo da capire
i vantaggi del loro utilizzo?
Grazie.
--
Luigi Cartelli

i vantaggi del loro utilizzo?
program lista(input, output);
var
	vettore : array[1..10] of integer;
	i : integer;
	lettera : char;
begin
	for i:= 1 to 10 do 
		begin
			read(lettera);
            		vettore[i] := lettera;
   		end;
	readln;
	for i := 1 to 10 do
    		write(vettore[i]);
	writeln;
end.
program listapointer(input, output);
type
	link = ^oggetto;
	oggetto = record
		next : link;
		dato : char;
		end;
var
	base,p : link;
begin
	base := NIL;
	while not eoln do
		begin
			new(p);
			p^.next := base;
			base := p;
			read(p^.dato);
		end;
readln;
while p^.next <> NIL do
	begin
		write(p^.dato);
		p := p^.next;
	end;
writeln;
end.
Come puoi vedere il primo e' implementato con un array, mentre il
secondo con una lista fatta di puntatori. 
Nel primo programma se scrivi 45 lettere e poi batti invio, il
programma comunque ti scrivere solo le prime 10, mentre il secondo si
ADATTA alla lunghezza della stringa immessa. E' questo uno dei
vantaggi dei puntatori. Essi inoltre ripeto che sono indispensabili
per la costruzione di alberi e grafi, strutture che in informatica
servono piu' di quanto si possa pensare. 
Con un grafo puoi simulare tantissime cose, come una piantina
stradale, un circuito elettrico; mentre con un albero puoi ordinare
EFFICIENTEMENTE elementi, e costruire potenti banche dati (B alberi).
Il C inoltre usa i puntatori come il pane quotidiano, quindi se vuoi
programmare VERAMENTE ti consiglio di imparare ad usarli. Certo e'
faticoso, ma alla fine risultano molto utili.
Spero di esserti stato di aiuto.
Ciao.
PS: I codici non li ho provati, quindi non so se funzionano.

Grazie per avermi dato i codici, ma non mi sono ancora chiari i puntatori,
forse mi servirebbe una rappresentazione grafica, un'espansione di
intelligenza :) boh! non lo so nemmeno io.
Comunque Io ho provato i tuoi codici e volevo dirti che nel primo l'array
deve essere of char
e che nel secondo se io digito per esempio  ciao quando premo invio mi da
oai
praticamente inverte la parola e la tronca di una lettera.
io ho scritto questo codice che però non mi funziona, se vuoi/puoi sai dirmi
dov'è l'errore?
program lista_con_puntatori;
uses crt;
type
mypointer = ^myrecord;
myrecord = record
lettera : char;
seguente : mypointer;
end;
var
primo, precedente,
corrente : mypointer;
begin
clrscr;
precedente := nil;
while not eoln do
begin
new (corrente);
read (corrente^.lettera);
readln;
corrente := precedente;
corrente^.seguente := corrente;
end;
while corrente^.seguente <> nil do
begin
write (corrente^.lettera);
readln;
end;
end.
Inoltre sai dirmi cosa posso fare con la var p : pointer co un'istruzione di
questo tipo?
getmem (p, 200);
grazie
Ciao.

getmem (p, 200);
Non so, ho provato a guardare sull'help del TP 7.0 ma non ho capito
nemmeno io.
Che dire...riguarda il progrmma, fai un disegno di quello che (come
facevo e faccio io) fa il programma e scleraci sopra, e l'unica.
Saluti.
Matteo Snidero.

Sperimentare, d'altronde, e' la migliore via per imparare.
Per quanto riguarda l'uso dei puntatori non ho idea di come iniziare.
Per l'array, puoi darmi piů informazioni?
Grazie

Per l'array, puoi darmi più informazioni?
var a : array [1..100] of string ;
Ma hai sottomano un manuale sul pascal ?
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>


wrote:
Vedo che non sono stato molto utile...vabbe', io ci ho provato...

 Ma hai sottomano un manuale sul pascal ?
Si lo ho un manuale sul TP che perň ho studiato poco, per passare a Delphi.
cmq il problema rimangono i puntatori