PDA

Visualizza la versione completa : Parametri * & [c++]


nacre
18-07-2002, 07:01
Salve a tutti, potreste per cortesia chiarirmi cosa succede quando un parametro di una funzione è passato in questo modo: es. void ScriviLista(TipoNodo * & x) (spesso incontrate nello studio di liste e alberi).
grazie in anticipo a tutti.
ciao dalla nacre

JamesD
18-07-2002, 09:07
L'operatore & restituisce l'indirizzo a cui punta una variabile mentre l'operatore * restituisce il contenuto dell'indirizzo puntato da un puntatore!

nacre
18-07-2002, 09:56
cosi' come e' scritto nelle' esempio!
es. TipoLista AzioneLista(TipoLista * & r);

spero di esser stata chiara.

ciao e grazie dalla nacre.

Maldito
18-07-2002, 10:22
puntatore del puntatore del puntatore di x

nacre
18-07-2002, 10:34
saresti cosi' gentile da farmi un esempio di utilizzo, o in sostanza spiegarmi perche' si usa questo modo visto che per le liste e' cosi' diffuso.
ciao e grazie dalla nacre.

nacre
26-07-2002, 19:14
perche' potrebbe essere utile a qualche altra persona.
In pratica i parametri passati in questo modo permettono di entrare in procedura con un puntatore e modificarlo e ritornarlo al main.

Ringrazio le altre persone che mi hanno risposto. L'esame di fondamenti di info 2 e' andato bene (28).

ciao a tutti dalla Nacre.

r0x
27-07-2002, 01:14
Fai questo ragionamento MOLTO MOLTO *grezzo*:

contenuto effettivo di una variabile = livello 0

Facciamo che (arbitrariamente) il & "abbassa" questo ipotetico "livello" della variabile, e il * lo "alza", cioè:

variabile = 0
&variabile = -1
&&variabile = -2
*variabile = 1
**variabile = 2

*& "totalizza" 0, e quindi dire 'variabile' equivale a dire '*&variabile'. D'altronde, se ci ragioni in modo più CRISTIANO, :D ti accorgi che leggendo tale sintassi usando l'espressione "indirizzo di" per il & e, in un certo senso, "contenuto di" per il *, ti ritrovi:

*&variabile = contenuto dell'indirizzo di variabile, ovvero la variabile stessa

Ho usato il modo più stupido possibile per spiegarmi! :p

Come avrai notato quindi è una cosa assolutamente superflua e inutile.. Non so dove tu l'abbia vista scritta ma ti assicuro che non ha nessun senso usarla. :tongue:

r0x
27-07-2002, 01:30
Volevo fare una precisazione cmq: ma quella che hai scritto è una chiamata o un prototipo? Perché un conto sono i dichiaratori * e &, e un altro lo sono gli operatori * e &.

Nelle dichiarazioni, come saprai, * identifica un puntatore, e & un riferimento (in C++); nelle espressioni, il * dereferenzia, e il & restituisce l'indirizzo effettivo (lea).

Nel post precedente ho chiarito il caso in cui i due simboli siano operatori, in occasione di una chiamata; nel caso quello invece sia un prototipo ('TipoLista AzioneLista(TipoLista * & r);'), dovresti avere un riferimento a puntatore (cioè un puntatore a puntatore) come parametro formale, credo.

Loading