PDA

Visualizza la versione completa : [C++] Cosa sono i "doppi puntatori"?


XWolverineX
13-11-2005, 12:39
Molte volte vedo funzioni o altri che richiedono un parametro di questo tipo


**Puntatore

Sarebbe un doppio puntatore...ma...cosa è?
Un puntatore che punta a un puntatore che punta a uno spazio di memoria???
E per passarlo come parametro di deve fare cosi...


typedef int* Pint;
Pint a;
miafunzione(&a);

Giusto? oppure anche


int *a;
miafunzione(&*a);

FinalFantasy
13-11-2005, 12:40
Originariamente inviato da XWolverineX
Molte volte vedo funzioni o altri che richiedono un parametro di questo tipo


**Puntatore

Sarebbe un doppio puntatore...ma...cosa è?
Un puntatore che punta a un puntatore che punta a uno spazio di memoria???

anche a me piacerebbe saperlo

oregon
13-11-2005, 12:46
Nulla di particolare ...

E' un puntatore ad un puntatore.

int a;
int *p;
int **pp;

a = 100;

p = &a;
pp = &p;

printf("%d\n", a);
printf("%d\n", *p);
printf("%d\n", **pp);

Se lo passi, non devi fare cose particolari, se la funzione accetta un parametro puntatore a puntatore ... se

int **pp;

e

void funz(int **x)

allora passi

funz(pp);

E ovviamente, nessuno vieta di usare anche puntatori a puntatori a puntatori ...

int ***p;

FinalFantasy
13-11-2005, 12:47
è ke funzione hanno?

oregon
13-11-2005, 12:56
Beh ... gli utilizzi sono tanti.

Ad esempio, saprai che i vettori sono identificati da un puntatore.

Non so se hai mai utilizzato matrici, ma queste sono identificate da puntatori a puntatori, dato che possono essere considerati vettori di vettori.

E poi, prova, come esercizio, a fare in modo che una funzione modifichi il valore di un puntatore ricevuto come parametro ...

unomichisiada
13-11-2005, 13:11
Con i puntatori a puntatori puoi realizzare acnhe dei piccoli tricks, dovresti vedere infatti come è semplice cancellare un nodo da una lista usando i doppi puntatori rispetto al farlo con i puntatori semplici.

oregon
13-11-2005, 13:34
Oppure, ancora, pensa ad una tabella di puntatori a funzioni.

E a un puntatore che, di volta in volta, a seconda dei casi, punti ad uno di questi puntatori per poter utilizzare una funzione piuttosto che un'altra ...

Quello e' un puntatore ad un puntatore ed e' utilissimo ...

Squall1988
13-11-2005, 13:49
a me viene sempre in mente l'esempio delle liste, come già detto. Molti non sanno infatti che quando passiamo un parametro per indirizzo in realtà passiamo un puntatore per valore, quindi il puntatore non può essere cambiato, per farlo bisogna passare un puntatore a quel puntatore.

In realtà col c++ c'è il reference quindi le cose sono anche più facili, ma io sto sempre parlando del c.

oregon
13-11-2005, 13:52
Originariamente inviato da Squall1988
Molti non sanno infatti che quando passiamo un parametro per indirizzo in realtà passiamo un puntatore per valore, quindi il puntatore non può essere cambiato, per farlo bisogna passare un puntatore a quel puntatore.

Infatti ... avevo scritto

"E poi, prova, come esercizio, a fare in modo che una funzione modifichi il valore di un puntatore ricevuto come parametro ..."

Loading