Newsgroup: it.comp.lang.pascal
Titolo: info su PChar

ciao a tutti!
Qualcuno potrebbe spiegarmi meglio la storia del PChar????
Per quanto ne so io praticamente è un puntatore di char, che permette di
oltrepassare il limite di 255 caratteri nelle stringhe...:))))))
com'è sta storia? io dei puntatori so poco, vorrei sapere come si fa a
dichiarare una variabile come PChar, e se ciò ha dei vantaggi nel
programma..:)))))
Grazie e ciao!
-- 
Carotino
Member #2 and PR of POTA (founded by Zarkan)
ICQ 19905752
Amiga's Paradise:
www.geocities.com/timessquare/labyrinth/5925/index.htm

programma..:)))))
La teoria la sai... la pratica dipende da te.
Troverai chi dice che senza i PChar non vivi, troverai chi, come me, non ha
mai usato un PChar in tutta la sua vita :-)
Comunque e' soggettivo: se fai un programma con delle stringhe di solito ti
accontenti di 255 caratteri (se il prog. e' per te).
Io puntatori in Pascal non ne ho quasi mai usati... in C uso solo quelli...
:-))
Ti racconto un altro paio di storielle, ma tutte in generale, perche'
davvero dei PChar non so nulla :-)
Tu allochi un pezzetto di memoria, ad esempio facciamo da 10 a 1347 :-)
Allora sai che in questa memoria non ci va nessuno.
Ora, per gran parte delle operazioni (io le chiamerei operazioni
sequenziali), ti e' sufficiente ricordare il 10, ossia da dove parti :-)
Questo e' un puntatore.
Ora, se tu vuoi metterci una stringa, con questo sistema avremo non solo i
255 caratteri, ma ne avremo a disposizione 1347-10=1337 :-)
Pero' poi ci sono altri problemi... te ne cito solo uno sulle stringhe.
In Pascal le stringhe sono array di caratteri in cui il primo carattere (lo
[0]), contiene la lunghezza.
Quindi la stringa "Ciao come stai?", sara' rappresentata come:
carattere[0]: #13
carattere[1]: 'C'
carattere[2]: 'i'
...
Questo comporta dei bei vantaggi in certe situazioni, ad esempio se vuoi
accoricare la stringa, ti basta cambiare il carattere[0]. Se ci metto #4, la
mia stringa diventera' "Ciao".
Nota che tutto il resto dell stringa non viene cancellato, solo non viene
preso in considerazione.
Invece con i PChar non succede (e non puo' succedere) cosi'.
Il primo PChar non tiene il conto della lunghezza (perche' se superiamo i
255 siamo fregati!), allora ci serve una gabola: scegliamo un carattere (che
potrebbe essere una 'e', oppure un '2', oppure qualsiasi carattere) e quando
troviamo quello, sappiamo che la stringa finisce.
Per convenzione si usa il carattere 0 (quello che in pascal scrivi #0),
perche' nelle stringhe di senso compiuto non si usa... :-)
Questo e' quello che succede anche in C :-)
Ed il PChar e' stato introdotto proprio per problemi di compattibilita' del
Pascal col C (ho letto che il problema era in Windows, parte del quale e'
scritto in C).
Comunque questo e' uno dei problemi minori in cui usi un puntatore.
Fondamentalmente i puntatori servono per "trasportare" da un funzione ad un
altra delle strutture dati grosse.
In Pascal lo vedi poco, perche' se vuoi passare ad una procedure una
stringa, fai
procedure MiaProc(s:string);
oppure se vuoi passare un record, passi:
type miorecord=record
 var a,b:integer;
end;
procedure miaproc(r:miorecord);
e sostanzilmente tu te ne freghi... :-)
Pero' gia' se vuoi costruire delle funzioni, la cosa si complica...
function MiaFuncStringa(s:string):string;
te la accetta ancora, ma
function MiaFuncRecord(r:miorecord):miorecord;
ritorna errore.
E' qua che usi i puntatori:
passi alla funzione un record (o un puntatore, tanto e' la stessa cosa), ma
ritorni un puntatore...
type miorecord=record
 var a,b:integer;
end;
precord=^miorecord;
function MiaFuncRecord(r:miorecord):precord;
e nel progemma scriverai:
var x,y:miorecord;
begin
 x.a:=10;
 x.b:=20;
 y^:=MiaFuncRecord(x);
end.
Con questo concludo... spero che basti e che si sia capito :-)
Spero di non aver cannato troppe cose... :-)))
Ciao ciao!
Emanuele Cesena
d.a.m...@iol.it
           Attenti all'antispam NOSPAM
http://www.geocities.com/SiliconValley/Grid/8879
trovate ora l'editor per i livelli di Bubble2000!! :-))
ICQ n° #10570672

Ema da M$ scripsit:
[SNIP]
grazie infinite!!!!!!!
adesso vedo di mettere in pratica i tuoi esempi per comprendere bene sta
roba...:)))))
ti ringrazio ancora per l'attenzione!!!!


Un bel di' Carotino scrisse:
C> grazie infinite!!!!!!!
C> adesso vedo di mettere in pratica i tuoi esempi per comprendere bene sta
C> roba...:)))))
C> 
bravissimo, ottimo :-)
C> ti ringrazio ancora per l'attenzione!!!!
eh... ci mancherebbe!!
P.S: sono da TIN invece che da M$, ma sono sempre io :-)
-- 
"Piu' e' urgente il motivo per cui si fa una cosa, piu' lento sara'
l'impiegato allo sportello", regola di Flugg
-- 
Emanuele Cesena
d.a.m...@iol.it
    occhio all'antispam NOSPAM!
http://www.geocities.com/SiliconValley/Grid/8879