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

Scusate sono nuovo del linguaggi!
Ma vorrei sapere in modo  chiaro e possibilmente dettagliato cosa sono i
puntatori, a cosa servono, come si utilizzano,ecc.
GRAZIE MILLE.
Saluti, Ale.

Entro nella stanza e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Ale :
#Scusate sono nuovo del linguaggi!
#Ma vorrei sapere in modo  chiaro e possibilmente dettagliato cosa sono i
#puntatori, a cosa servono, come si utilizzano,ecc.
I puntatori sono variabili che contengono indirizzi di memoria.
Ho provato a scriverti qualcosa, ma c'e' veramente tanto da dire e ho
rinunciato presto all'idea ;).
Comunque in rete esiste il materiale di Ted Jensen sui puntatori : e'
un vero e proprio tutorial che spiega dalle basi sino agli aspetti
piu' complessi il loro funzionamento.
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

rinunciato presto all'idea ;).
Non potresti ripensarci?!
Please!
Saluti, Ale.
Comunque grazie ugualmente.


 Please!
#include <stdio.h>
void main(void) {
    int a=5;
    int *pa;
    printf ("a=%d\n", a);
    pa = &a;
    printf ("*pa=%d\n", *pa);
    printf ("pa=%x\n",pa);
    printf ("&a=%x\n",&a);
    pa = (int *)malloc (10 * sizeof (int));
    if (pa == NULL) {
        printf ("Out of memory!");
        return;
    }
    for (a=0; a<10; a++) {
        pa[a]=a;
        printf ("pa[%d] = %d == *(pa+%d) = %d, &pa[%d] = %x == pa+%d = %x\n",
                a, pa[a], a, *(pa+a), a, &pa[a], a, pa+a);
    }
    printf ("That's all, folks!\n");
}

Entro nella stanza e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Ale :
#Non potresti ripensarci?!
#Please!
No, credimi, non farei altro che confonderti le idee, in quanto non
saprei esporre gli argomenti nell'ordine giusto per farti comprendere
bene. Ho riprovato una seconda volta, ma ho subito cancellato le righe
;)
Comunque, ripeto, se la tua comprensione dell'inglese e' buona, posso
spedirti per e-mail il manuale che trovi alla pagina :
http://www.netcom.com/~tjensen/ptr/cpoint.htm
E' un tutorial molto ben fatto indirizzato proprio a chi vuol
comprendere cosa siano e come si utilizzano i puntatori.
In ogni caso, sono a tua disposizione sia sul ng che privatamente
(meglio sul ng), per qualsiasi chiarimento in proposito. 


Entro nella stanza e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Nicola Leoni :
#void main(void) {
^^^ errato tra l'altro, non credo che il tuo programma sia di grande
aiuto come spiegazione.
Lungi da me la polemica, tutti siamo bravi a scrivere qualcosa del
genere, ma se non la si commenta, il tutto risulta incomprensibile...


 genere, ma se non la si commenta, il tutto risulta incomprensibile...
Voleva essere solamente uno stimolo appositamente non commentato,
per suscitare in lui la curiosita' e la voglia di sfogliare un manuale.
Qualcosa di semplice semplice e comprensibile.
Mi dispiace che sia apparso come gesto di arrogante sbruffone, quale
non ritengo proprio di essere.
:P
Ciao.

Entro nella stanza e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Nicola Leoni :
#Mi dispiace che sia apparso come gesto di arrogante sbruffone, quale
#non ritengo proprio di essere.
Qualcuno, forse, ha detto questo ?


 Qualcuno, forse, ha detto questo ?
Ho letto tra le righe

Entro nella stanza e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Nicola Leoni :
#Ho letto tra le righe
Ma per favore...


 GRAZIE MILLE.
Il puntatore e' una variabile che contiene un indirizzo di memoria; è
indicata con un * che precede il nome della variabile (*p ad esempio).
Ad esempio: immagina che *a contenga l'indirizzo di memoria della variabile
b, allora l'istruzione:
c = *a
ha come effetto quello di porre il valore di b in c... ???!!!! infatti c
riceve il valore che la variabile a (che a sua volta punta -da cui
puntatore- all'indirizzo di b) gli restituisce. Non so se e' chiaro
In realtà, come immagino saprai, quello che ho scritto non e' assolutamente
compilabile ne, tantomeno, eseguibile ma, concettualmente accettabile.
Mi chiederai... ma come faccio a conoscere l'indirizzo?
he he he per questo c'è l'operatore & che restituisce l'indirizzo della
variabile che lo segue.
Ad ingarbugliare il tutto concorre il fatto che un puntatore può puntare a:
file, strutture, array, funzioni ed addirittura a puntatori stessi.
Una vera tragedia... :-)
A cosa servono?... Praticamente a tutto, come ti dicevo.
Gli abili programmatori ne fanno un largo utilizzo a discapito della
leggibilità del codice ma con un incremento notevolissimo di portabilità,
efficenza, stabilità (se tutto funziona).... una vera manna dal cielo
???!!!!
Di più non so aggiungere anche perchè, come ti dicevo, sono nuovissimo
dell'argomento.... Anzi, ne approfitto per chiedere agli amici del NG di
segnalarmi gli errori che ho commesso in questa mia... magari ho fatto solo
una grande confusione...
Grazie a tutti
ciao ed a presto... Vito

 stabilità
Direi proprio di no. Anzi, normalmente è il contrario proprio perché i
puntatori in generale diminuiscono la chiarezza del codice e quindi
possono celare errori difficili da scovare.
EMG

 Non è *a a contenere l'indirizzo ma a.
Infatti... grave inesattezza
Ciao e a presto