Newsgroup: it.comp.lang.c
Titolo: Dubbio su "Passaggio di parametri"

Salve, vorrei capire per bene il "Passaggio di parametri" se mi
seguite guardate questo programma:
scrivo la mia bella funzione:
int incrementa (int x)
{
  x++;
  return x;
}
int main (void)
{
 int a,b;
b=5;
a=incrementa(b); /* qui ho il parametro attuale che non incrementa */
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
ma il passaggio dei parametri, in questo programma, dove avviene?
io ho solo capito che per a=incrementa(b) è una parte di codice che vi
vado a scrivere:
{int x=b;
x=x+1; /* l'incremento infatti è fatto su x e non su b */
a=x;
}
quindi il passaggio di parametri è "per valore"... ma non l'ho tanto
capito! aiutatemi!
grazie mille!

 vado a scrivere:
Allora non andare in paranoia e open your mind :)
la funzione acquisisce (nel tuo caso un valore) elabora (nel tuo caso lo incrementa) 
e restituisce (nel tuo caso il valore incrementato).
La funzione nel tuo caso lavora con variabili proprie interne
che gli servono per fare quello che vuoi tu 
a=incrementa(b); // in questo caso fai conto che al posto di incrementa(b)
		 // ci sia il codice della funzione, sarebbe una porcheria
		 // scriverlo in quel modo invece in questo modo risulta più leggibile
Le funzioni poi le puoi riutilizzare solamente richiamandole evitando
di ripetere sempre lo stesso codice per fare determinati operazioni
... spero di essermi spiegato ... ma ho un calo di zuccheri e ne dubito ... :)
Comunque è meglio che prendi un bel manuale e ti studi le funzioni
e tutto ciò che ne è annesso provi gli esempi e vedrai che capirai.
Ciao Max
-- 
+-----------------------------------------------------------+
| Secondo alcuni autorevoli testi di tecnica Aeronautica,   |
| il calabrone non può volare, a causa della forma e del    |
| peso del proprio corpo in rapporto alla superficie alare. |
| Ma il calabrone non lo sa e perciò continua a volare.     |
|					     Igor Sikorsky  |
+-----------------------------------------------------------+

 capito! aiutatemi!
Non c'e' nessun quindi :)
Il passaggio di parametri e' una cosa che ho provato a spiegarti e avviene
ogni qual volta invochi una funzione che accetta dei parametri (che non
sono altro che delle variabili).
Il passaggio per valore e' un tipo di passaggio di parametri in cui le
variabili che passi come parametri vengono *copiate* nelle variabili
locali. Quindi la variabili che ti ritrovi nella funzine sono solo delle
copie delle variabili con cui la funzine e' stata invocata... questo
implica che ogni modifica alla copia, NON riguarda l'originale.
Si contrappone al passaggio per riferimento (che in C non esiste, anche se
si puo' simulare con i puntatori) in cui le modifiche alla variabile locale
si ripercuotono sul parametro con cui hai invocato la funzione.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

grazie mille!
Spero di aver chiarito un pochettino ;)
Saluti ^__^

 capito! aiutatemi!
Ti hanno gia' spiegato come avviene la chiamata di funzione.
Aggiungo solo in significato della frase "per valore",
che sembra darti dei dubbi     :)
"per valore" significa che cio' che viene comunicato
alla funzione e' "il valore" del parametro,
cioe' leggiamo la variabile "b" : il valore e'   <5>,
scriviamo  <5> in un posto da dove poi
la funzione lo leggera'.
La funzione vede solo il <5>, non sa che
era il valore della variabile  "b".
Ottieni la stessa cosa chiamando la funzione cosi' :
a=incrementa(5);
L'esecuzione del codice della funzione e' identico
nei due casi.
Tutto cio' si contrappone al passaggio "per indirizzo"
o "per riferimento" etc...
in questo caso si passa alla funzione l'indirizzo
di memoria della variabile.
Cosi'  la funzione ha la possibilita' di agire come
vuole sulla variabile :
cioe' puo' leggerne il valore ( come nel caso sopra ),
ma lo puo' anche modificare.
Come ti hanno gia' spiegato, il C passa i parametri
per valore, quindi se c'e' bisogno di modificare
una variabile dentro la funzione, si usano i puntatori,
cioe' si passa (sempre per valore) l'indirizzo della
variabile.
Ovviamente nel codice della funzione devi tener
conto del fatto che il parametro e' un puntatore
alla variabile e usare la sintassi appropriata..
Ciao
E.

On Thu, 06 Nov 2003 09:09:13 GMT, "gsx" <emmeoerr...@ioelle.iti>
wrote:
ringrazio tutti coloro che mi hanno aiutato! ora ho capito :)
grazie!