Newsgroup: it.comp.lang.c++
Titolo: PUNTATORI?

Salve a tutta la ng,
 chiedo scusa a tutti se sbaglio impostare il messaggio non posto moltissimo
nelle ng.
  sono un neofita in c++ ho cominciato da pochissimo, provengo da linguaggi
così detti semplici (Delphi), onestamente però studiando il c++ devo
ammettere che è tutta un'altra cosa sottto certi aspetti.
Finito di rompere ;-) volevo un aiuto in merito ai puntatori.
Un certo senso un 0.0000000000001% ho capito come si utilizzano ma non
riesco a capire la loro utilità Vi faccio un esempio
nel mio libro c'è questo esempio:
...
int f=10;
int *p;
p=&f;
printf("jsdkfjlksd",&f);
printf("jsdkfjlksd",p);
....
La capisco la stupidità della mia domanda ha dato uno sguardo anche a
puntatori agli array ma non riesco a cogliere la necessita. :-(     mi
vergogno...
Quindi in conclusione chi può fare un esempio reale per comprendere la
potenza di questi puntatori visto che sul libro c'è scritto che sono una
delle cose che fanno del c/c++ uno dei più potenti linguaggi.
GRAZIE VI PREGO DI AUTARMI
DEVIS
-- 
Posted from 
altair.interplanet.it
 [192.106.95.10] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

DEVIS
una semplice funzione che usa un puntatore....
converte tutti le a in b in una stringa :)
void converte_a_in_b(char *ptr)
{
   while(*ptr != 0x00) {
	if (*ptr == 'a') *ptr='b';
	ptr++;
	};
}
char stringa[] = { 'c', 'i', 'a', 'o', 0x00 };
converte_a_in_b(stringa);
+tosto che fare una cosa del genere
copia di stringa in un secondo  buffer
scansione del 2nd buffer...
passaggio dell'indirizzo del 2nd buffer e copia
del risutlato di nuovo in stringa
Tu non riesci a vederne l'utilità.... ma quando te ne accorgerai
ti rendi conto che hai in mano qualcosa di spaventoso... poter
accedere tramite un puntatore alla memoria del processo...
il resto vien da se
cod

 delle cose che fanno del c/c++ uno dei piu` potenti linguaggi.
Supponi di avere una funzione foo che accetta un int e restituisce void
void foo(int p) {
	...
}
Come ben sai l'argomento viene passato per copia. Tutte le manipolazioni
che fai su p all'interno di  foo rimangono all'interno di foo. Se invece
tu hai  la necessita`  di modificare il  valore di p  in maniera  che la
modifica  rimanga anche  dopo la  chiamata  che fai? Non  passi piu`  il
valore di  p, passi una  variabile che  contiene il segmento  di memoria
dove e` contenuto il valore di p.
Es.
void foo(int p) {
	p++;
}
void bar(int *p) {
	(*p)++;
}
int main () {
	int p = 1;
	foo(p);
	printf("%d\n", p);
	bar(&p);
	printf("%d\n", p);
}
Nella  seconda chiamata  passo  un  puntatore a  p;  all'interno di  bar
dereferenzio  il  puntatore (ie.  leggo  il  contenuto del  segmento  di
memoria passato) e lo incremento. La modifica e` visibile anche in main.
L'esempio e` banale, ma penso che renda l'idea.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se alla sera, dopo una strepitosa vittoria, guardandoti allo
specchio dovessi notare un secondo paio di palle, che il tuo 
cuore non si riempia d'orgoglio, perche` vuol dire che ti 
stanno inculando -- Saggio Cinese

 DEVIS
I puntatori sono molto utili quando usi le liste con delle celle collegate 
tra di loro. Il vantaggio principale è che la dimensione della lista la 
puoi stabilire a run-time, cioé quando il programma è ormai in esecuzione, 
quindi usi la memoria solo quando serve e la liberi rendendola 
riutilizzabile, quando non ti serve più. Se invece usi un array devi 
definire la dimensione per forza quando scrivi il codice e la memoria é 
utilizzata anche quando serve (quindi sprecata).
 
ciao
-- 
Luigi
--
bug windows [5] = {"95", "98", "NT", "Me", "2000"};

 ha scritto nel messaggio
news:000501c0dea0$aab5aae0$2a0a010a@WITBOY5...


 Swap(x,y);
Ovviamente Swap(&x,&y); ma gia' te lo avevo scritto prima, quindi credo che
lo avessi gia' capito da te !
Alex