PDA

Visualizza la versione completa : [C] Passaggio per riferimento in C


atomico
01-12-2009, 16:50
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

Stoicenko
01-12-2009, 17:37
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



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

atomico
01-12-2009, 18:45
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



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.

Stoicenko
02-12-2009, 09:09
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..

atomico
02-12-2009, 10:27
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.

Stoicenko
02-12-2009, 11:50
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

KrOW
02-12-2009, 13:17
Ciao ... Siccome l' operatore -> ha precedenza ripetto l' operatore * devi scrivere:

(*head)->info

atomico
02-12-2009, 13:45
Originariamente inviato da KrOW
Ciao ... Siccome l' operatore -> ha precedenza ripetto l' operatore * devi scrivere:

(*head)->info

ma dai.. non ci sarei mai arrivato, grazie mille.

atomico
02-12-2009, 13:45
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

KrOW
02-12-2009, 16:34
Prego, ciao :ciauz: :ciauz: :ciauz:

Loading