View Full Version : Programma C
stregone_giallo_rosso
26-10-2007, 17:22
Salve ho questo programma in C e devo indicare quale valore viene stampato. Leggendo il programma (dovrebbe!) stampare 58. Poi ho provato a esegiure il prigramma e stampa 3:stordita: non ho capito xkè, qualkuno sa spiegarmelo???
void funzione(int x) {
int k;
for(k = 0; k < 10; k++) x += k;
}
void main() {
int a = 3;
funzione(a);
printf("%d\n", a);
}
marko.fatto
26-10-2007, 17:45
forse perchè stampi a che inizializzi a 3 e non modifichi +..
il problema è che l'argomento della funzione è passato per valore. in termini semplicistici, quando scrivi "funzione(a)" il programma si fa una copia dell'argomento, sulla quale la funzione lavora. al termine della funzione tale copia, eventualmente modificata, viene distrutta, quindi la variabile a non viene modificata.
se lavori in c++ risolvi abbastanza facilmente con un passaggio per riferimento, dichiarando la funzione come "void funzione(int& x)".
altrimenti ti rimangono solo due vie: passare l'argomento per indirizzo, dichiarando la funzione così:
void funzione(int* x) {
int k;
for(k = 0; k < 10; k++) *x += k;
}
e richiamandola passando ogni volta l'indirizzo dell'argomento: "funzione(&a)"
oppure dichiarandola come int per ritornare x ed assegnarla all'argomento stesso: "a=funzione(a)"
stregone_giallo_rosso
26-10-2007, 17:52
Il codice è esattamente quello che ho postato! Quindi dice che a non viene modificato dalla funzione??
marko.fatto
26-10-2007, 17:55
yess.. nella funzione fa un po' di conti ma il risultato da la non si muove...
stregone_giallo_rosso
26-10-2007, 17:58
OK, thanks a entrambe!!:D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.