PDA

Visualizza la versione completa : [C++]Cambiare variabile assegnata alla funzione


TheDark191
18-11-2010, 22:21
Ciao a tutti! E' da poco che ho cominciato ad esercitarmi nel creare funzioni e mi sono imbattuto in un problema.Se creo una funzione del tipo

int incremento(int x){
x++}

la variabile x non viene incrementata.Perchè mai?

Alex'87
18-11-2010, 22:23
Originariamente inviato da TheDark191
Ciao a tutti! E' da poco che ho cominciato ad esercitarmi nel creare funzioni e mi sono imbattuto in un problema.Se creo una funzione del tipo

int incremento(int x){
x++}

la variabile x non viene incrementata.Perchè mai? Perché la variabile passata a incremento viene passata per valore e non per indirizzo. La funzione pertanto riceve una copia della variabile: ogni modifica di questa copia non influenza la variabile originale. Se vuoi poter modificare il suo valore dovresti usare i puntatori.

edit: per essere pignoli x viene incrementata, solo che essendo una copia della variabile che passi alla funzione non vedrai le modifiche al di fuori della funzione stessa.

TheDark191
18-11-2010, 22:31
ah ecco! grazie della delucidazione :D ora vedo un po come si utilizzano i puntatori ^^

TheDark191
18-11-2010, 23:45
scusa ma non funziona ancora >.< se faccio la funzione

int incremento(int* x){
*x++;}


e in mai dichiaro una variabile int a=0; se questa variabile la inserisco nella funzione non ottengo l'incremento della variabile ma continua a rimanere a=0

MdE2005
19-11-2010, 00:03
Originariamente inviato da TheDark191
scusa ma non funziona ancora >.< se faccio la funzione

int incremento(int* x){
*x++;}


e in mai dichiaro una variabile int a=0; se questa variabile la inserisco nella funzione non ottengo l'incremento della variabile ma continua a rimanere a=0
Certo, la a deve essere un puntatore, non una variabile quindi si dichiara così: int * a

TheDark191
19-11-2010, 00:13
continua ad essere 0 :S ho fatto così precisamente


int incremento(int* x); i

int main(int argc, char *argv[]) {
int * a=0;
incremento(a);
cout<<a;
system("PAUSE");
return EXIT_SUCCESS;
}

int incremento(int*x){
*x++;}

MItaly
19-11-2010, 00:40
Il codice corretto è:


int incremento(int* x);

int main(int argc, char *argv[])
{
int a;
incremento(&a);
cout<<a;
system("PAUSE");
return EXIT_SUCCESS;
}

int incremento(int*x)
{
*x++;
}

Prima di fare ulteriori danni con i puntatori ti consiglio di leggerti il relativo capitolo del tuo libro di C, non sono un concetto semplicissimo.

TheDark191
19-11-2010, 12:27
scusa ma continua a non funzionare...ho copiato e incollato anche la tua correzione ma niente,a rimane sempre allo stesso valore e non aumenta

MItaly
19-11-2010, 12:36
Pardon, dimenticai una cosa


int incremento(int* x);

int main(int argc, char *argv[])
{
int a=0;
incremento(&a);
cout<<a;
system("PAUSE");
return EXIT_SUCCESS;
}

int incremento(int* x)
{
(*x)++;
}

TheDark191
19-11-2010, 12:43
ah ecco ora è andato!grazie mille :D

Loading