Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Parametri * & [c++]

  1. #1

    Parametri * & [c++]

    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

  2. #2
    Utente di HTML.it L'avatar di JamesD
    Registrato dal
    Oct 2001
    Messaggi
    415
    L'operatore & restituisce l'indirizzo a cui punta una variabile mentre l'operatore * restituisce il contenuto dell'indirizzo puntato da un puntatore!

  3. #3

    si ma entrambi?

    cosi' come e' scritto nelle' esempio!
    es. TipoLista AzioneLista(TipoLista * & r);

    spero di esser stata chiara.

    ciao e grazie dalla nacre.

  4. #4
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    413
    puntatore del puntatore del puntatore di x

  5. #5

    ti ringrazio

    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.

  6. #6

    volevo soltanto chiudere l' argomento

    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.

  7. #7
    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, 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!

    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:

  8. #8
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.