Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142

    [C] sto sclerando, passaggio per riferimento in C

    vi prego ho bisogno di aiuto, sto sclerando.

    Sto gestendo una normale lista.

    nel main dichiaro il puntatore di testa:
    NODO * head=NULL;

    poi nel main richiamo una funzione dove passo head, ho capito che nel C x "simulare" il passaggio di riferimento si fa in quesot modo:

    nel main chiamo:

    pippo(&head)

    e nella funzione avrò void pippo (nodo ** head)
    {
    ecc ecc
    }
    ogni volta che nella funzione compare il termine head dovrò sempre chiamarlo come puntatore

    es: *head=NULL;

    in questo modo quando esco dalla funzione pippo avrò che head sarà uguale a null.

    tutto giusto fino e qua penso.

    ora però all'interno di pippo voglio chiamare un'altra funzione sempre con head come parametro.

    allora farò:

    void pippo (nodo ** head)
    {
    pluto(*&head)
    }


    e

    void pluto (nodo checimetto qua?)

    secondo quello che ho capito anche in pluto ci devono essere i 2 **, ma poi quando entro in un campo della struttura tipo:

    *head->info;

    mi da quest errore

    request for member `info' in something not a structure or union


    cosa sbaglio? ho bisogno di un forte chiarimento, grazie ciao

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    come hai scritto tu la funzione pippo non passi per riferimento il puntatore la il suo indirizzo.. secondo me ti stai complicando un bel po' la vita

    codice:
    NODO * head=NULL;
    
    pippo(head);
    
    void pippo (nodo *head)
    {
        //ecc ecc
        pluto(head);
    }
    
    void pluto(nodo *head)
    {
        //ecc ecc
    }
    così passi per riferimento il puntatore e per valore il suo indirizzo

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    Originariamente inviato da Stoicenko
    come hai scritto tu la funzione pippo non passi per riferimento il puntatore la il suo indirizzo.. secondo me ti stai complicando un bel po' la vita

    codice:
    NODO * head=NULL;
    
    pippo(head);
    
    void pippo (nodo *head)
    {
        //ecc ecc
        pluto(head);
    }
    
    void pluto(nodo *head)
    {
        //ecc ecc
    }
    così passi per riferimento il puntatore e per valore il suo indirizzo
    scusa ma facendo così, quando esco da pippo e torno al main head sarà non modificata.

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    il passaggio per valore è solo dell'indirizzo e non dell'oggetto puntato..

    in quel modo ti assicuri che il puntatore a head non venga cambiato ma puoi benissimo modificare l'oggetto cambiato..

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    Originariamente inviato da Stoicenko
    il passaggio per valore è solo dell'indirizzo e non dell'oggetto puntato..

    in quel modo ti assicuri che il puntatore a head non venga cambiato ma puoi benissimo modificare l'oggetto cambiato..
    non ho mica capito, io voglio modificare head in modo che quando esco dalla funzione rimanga modificato, come hai scritto te non lo fa.

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ma vuoi modificare il nodo (oggetto puntato) o il puntatore a nodo?

    come ti ho detto io puoi modificare l'oggetto nodo puntato..

    se vuoi modificare il puntatore allora la strada che avevi intrapreso è giusta

  7. #7
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao ... Siccome l' operatore -> ha precedenza ripetto l' operatore * devi scrivere:
    codice:
    (*head)->info
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    Originariamente inviato da KrOW
    Ciao ... Siccome l' operatore -> ha precedenza ripetto l' operatore * devi scrivere:
    codice:
    (*head)->info
    ma dai.. non ci sarei mai arrivato, grazie mille.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    Originariamente inviato da Stoicenko
    ma vuoi modificare il nodo (oggetto puntato) o il puntatore a nodo?

    come ti ho detto io puoi modificare l'oggetto nodo puntato..

    se vuoi modificare il puntatore allora la strada che avevi intrapreso è giusta
    la seconda

  10. #10
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Prego, ciao
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

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.