PDA

Visualizza la versione completa : [c]sono fregato! help! :(


Alexxio
20-03-2003, 21:30
#include <stdio.h>

int change(int);
main(){
int cane=5;
printf("now cane is %d",cane);
printf("u can change it!");
change(cane);
printf("u changed cane into %d",cane);
return 0;
}
int change(int dog){
scanf("%d",&dog);
printf("u choose %d",&dog);
return dog;

}


PERCHE' NN VA??? PERCHE'!!:cry: :cry: :cry: :cry: :cry: :cry:

Johnny_Depp
20-03-2003, 21:41
U are AMERICAN :D ?


#include <stdio.h>

void change(int &i);

void main(){
int i = 5;
printf("i = %d\n", i);
printf("change()\n");
change(i);
printf("i = %d\n", i);
}

void change(int &i){
i = 7;
}
P.S. ora non ricordo se il codice (reference &) valga anche in C.

Alexxio
20-03-2003, 21:46
scusa ma quello che ho scritto io è proprio sbagliato????e cmq io volevo fare una cosa diversa...cioè far diventare il valore quello che dico io dallo scanf...

Johnny_Depp
20-03-2003, 21:54
#include <stdio.h>

void change(int &i, int j);

main(){
int i=5, j=1;
printf("i = %d, j = %d\n", i, j);
printf("change()\n");
change(i, j);
printf("i = %d, j = %d\n", i, j);
return 0;
}

void change(int &i, int j){
i = 50; // cambio il valore di i in main()
j = 1000; // non cambio il valore di j in main()... ma solo della copia di j all'interno della funzione change()
}

Alexxio
20-03-2003, 21:56
cioè rispondimi un attimo, ciò che ho scritto io sembra completamente sbagliato, eppure teoricamente non lo è :)
tu mi hai fatto degli altri esempi diversi perchè io lavoro su funzioni int tu su void...che mi sembra diverso...

Johnny_Depp
20-03-2003, 21:59
#include <stdio.h>

void change(int &i, int j);

main(){
int i=5, j=1;
printf("ORIGINE i = %d, j = %d\n", i, j);
printf("change()\n");
change(i, j);
printf("DOPO CHANGE i = %d, j = %d\n", i, j);
return 0;
}

void change(int &i, int j){
printf("Inserisci un nuovo valore per i :");
scanf("%d", &i);
printf("Inserisci un nuovo valore per j :"); // j NON CAMBIA IN MAIN()
scanf("%d", &j);
}

Alexxio
20-03-2003, 22:03
forse non mi sono spiegato...il fatto che io lavori su funzioni int mi permette di cambiare il valore di i nel main, o no?


#include <stdio.h>

int change(int &i);

void main(){
int i = 5;
printf("i = %d\n", i);
printf("change()\n");
change(i);
printf("i = %d\n", i);
}

int change(int &i){

scanf("%d",&i); return i;
}


questo algoritmo funziona ma non capisco:
1)perchè nel prototipo devo inserire la variabile, cosa che non si fa mai...
2)perchè devo lavorare sugli indirizzi (&i) al posto dei valori!

Johnny_Depp
20-03-2003, 22:18
allora... (lasciando perdere il prototipo, che è esatto in entrambi i modi)

se tu vuoi chiamare una funzione che ti cambi il valore di un intero, char, ecc...

devi passare alla FUNZIONE l'indirizzo di tale variabile
si chiama passaggio per riferimento o sempl. reference.

Se invece vuoi cambiare il valore della variabile (o copia di tale variabile) soltanto all'interno della funzione chiamata
passi la variabile per valore (cioè passi alla funzione il valore della variabile) e non il suo indirizzo in memoria.

IN BREVE:

Se tu vuoi che la funzione "cane()" cambi in MAIN()
la variabile passata devi utilizzare un reference ...(int &j)

Se invece vuoi cambiare il valore della variabile
passata alla funzione (copia della variabile) soltanto
all'interno della funzione utilizzi il passaggio per valore ...(int i)

Da quello che ho notato nel tuo codice
mi è parso di capire che tu voglia cambiare in main()
il valore della variabile passata alla funzione change()...

Il mio codice è un semplice (didattico) esempio di entrambe
i casi

Johnny_Depp
20-03-2003, 22:29
nel tuo specifico caso, prova questi 2 esempi e nota la differenza:


#include <stdio.h>

int change(int);
main(){
int cane=5;
printf("MAIN ()cane = %d\n",cane);
change(cane);
printf("MAIN() cane = %d\n",cane); // NON CAMBIATO
return 0;
}
int change(int dog){
printf("Nuovo valore per cane : ");
scanf("%d", &dog);
printf("CHANGE() cane = %d\n", dog);
return dog;

}


e



#include <stdio.h>

int change(int);
main(){
int cane=5;
printf("MAIN ()cane = %d\n",cane);
printf("MAIN() cane = %d\n",change(cane)); // CAMBIATO
return 0;
}
int change(int dog){
printf("Nuovo valore per cane : ");
scanf("%d", &dog);
printf("CHANGE() cane = %d\n", dog);
return dog;

}

Alexxio
20-03-2003, 22:52
grazie sei un mito!ora ho capito...bastava mettere il change nella printf!! :dhò:
certo che i tipi ke hanno inventato il c potevano anke fare una cosa un po' più elastica...per una cavolata mi è crollato il mondo

Loading