PDA

View Full Version : [C] funzione che ritorna una struttura


TecnologY
30-11-2012, 13:53
ciao, ho scritto questo programma semplice ma non so se quello che cerco sia possibile, ovvero fare una funzione che si possa eguagliare ad una struct.... quindi dovrebbe dare in output una struct
#include <stdio.h>
struct boh{
int p1;
}primo;

struct boh funzione(struct boh x)
{
x.p1=2;
}

int main(){
primo.p1=5;
primo = funzione(primo); //sta assegnazione è totalmente inutile, alla fine stampa sempre 5 anzichè 2
printf("%d", primo.p1);
return 0;
}

in pratica la funzione è sbagliata, qualcuno sa dirmi come andrebbe impostata? so che con i puntatori posso risolvere il problema, ma senza i puntatori? così sarebbe migliore, più versatile

!fazz
30-11-2012, 14:41
ciao, ho scritto questo programma semplice ma non so se quello che cerco sia possibile, ovvero fare una funzione che si possa eguagliare ad una struct.... quindi dovrebbe dare in output una struct
#include <stdio.h>
struct boh{
int p1;
}primo;

struct boh funzione(struct boh x)
{
x.p1=2;
}

int main(){
primo.p1=5;
primo = funzione(primo); //sta assegnazione è totalmente inutile, alla fine stampa sempre 5 anzichè 2
printf("%d", primo.p1);
return 0;
}

in pratica la funzione è sbagliata, qualcuno sa dirmi come andrebbe impostata? so che con i puntatori posso risolvere il problema, ma senza i puntatori? così sarebbe migliore, più versatile

la funzione è passata per valore e non per riferimento quindi andando a modificare il valore del campo la modifica viene persa all'uscita della funzione (scope delle variabili)

quindi o la ritorni (e devi ritornarla visto che hai scritto una funzione e non una procedura) oppure ti scrivi una procedura (funzione di tipo void) e passi la struttura per riferimento (&)

TecnologY
30-11-2012, 15:46
Grazie fazz, hai ragione, era inutile la funzione dato che non ritornava niente. :D :stordita:

Ok, per avere quello che cercavo bastava aggiungere return x.
struct boh funzione(struct boh x)
{
x.p1=3;
return x;
}

Spiego un attimo a chi è nei miei stessi panni perchè volevo far sta roba, me l'ha consigliato il prof, in pratica così si ha una funzione che vale doppio, cioè se nel main la richiamiamo così:
...immaginando di avere un codice simile:

struct boh {
....
}caso1, caso2;

se avessi una funzione organizzata come quella all'inizio di sto post e facessi:

caso1=funzione(caso1); così vale come se fosse fatta coi puntatori per riferimento
caso2=funzione(caso1); così la struct caso1 non viene modificata, ma si modifica una struct ausiliaria che qui ho chiamato caso2


Coi puntatori secondo me è più complesso, per il resto va beh
ciao!