PDA

Visualizza la versione completa : [C] puntatori e passaggio di funzione


devilfire
26-10-2004, 12:27
ciao!
ho un main:
int main()
{
...

int eta;
i=pippo(&eta);
....
}

questa è la funzione PIPPO:

int pippo(int *eta)
{
....
/*Qui devo modificare il valore di età che è passato per indirizzo
in questo modo potrò usarlo nel main modificato.
*/

//Ho provato a scrivere :
*eta=100; //ma non funge..

....
return 0; //che non posso cambiare (dato da specifica)
//Quindi il valore di eta devo per forza cambiarlo tramite //indirizzo, senza variabili globali.
}

Come fare?

grazie!!

cikko
26-10-2004, 13:15
Mah, non saprei come hai impostato il programma,
cmq dai un'occhiata a questo codice al volo (non badare ad eventuali errori):


Questo codice modifica correttamente il valore di i;

#include <stdio.h>
#include <stdlib.h>

int pippo(int*);

int main()
{
int i=0;
printf("valore iniziale: %d\n", i);

i=pippo(&i);
printf("valore dopo funzione: %d\n", i);

return EXIT_SUCCESS;
}

int pippo(int* pvalue)
{
*pvalue=100;
return *pvalue;
}

Kreator
26-10-2004, 14:29
Originariamente inviato da devilfire
ciao!
ho un main:
int main()
{
...

int eta;
i=pippo(&eta);
....
}

questa è la funzione PIPPO:

int pippo(int *eta)
{
....
/*Qui devo modificare il valore di età che è passato per indirizzo
in questo modo potrò usarlo nel main modificato.
*/

//Ho provato a scrivere :
*eta=100; //ma non funge..

....
return 0; //che non posso cambiare (dato da specifica)
//Quindi il valore di eta devo per forza cambiarlo tramite //indirizzo, senza variabili globali.
}

Come fare?

grazie!!



Le cose sono 2, o usi un passaggio per riferimento o un passaggio per indirizzo.
Questo dovrebbe essere il tuo programmino con il passaggio per riferimento, intendo "dovrebbe" per il fatto che non lo ho compilato.

int pippo(int &eta); // predichiarazione funzione

int main()
{
...

int eta;
i=pippo(eta);
....
}

questa è la funzione PIPPO:

int pippo(int &eta) // definizione funzione
{
....
/*Qui devo modificare il valore di età che è passato per indirizzo
in questo modo potrò usarlo nel main modificato.
*/

//Ho provato a scrivere :
eta=100; //ma non funge..

....
return eta; //che non posso cambiare (dato da specifica)
//Quindi il valore di eta devo per forza cambiarlo tramite //indirizzo, senza variabili globali.
}

Una precisazione.
Non ha senso mettere un ritorno alla funzione, dovevi ritornare un vuoid.
Cmq provalo.
Dovrebbe andare, vedrai che il valore di "eta" nel main e' pari a 100.
Fa sapere se funziona.

:ciauz:

Loading