Pagina 1 di 1

[C] variabili globali

MessaggioInviato: sab set 11, 2004 7:26 pm
da mciasco
Salve,

ho la seguente variabile globale:

<font face="Courier New">
int var;
</font id="Courier New">

la seguente funzione:
<font face="Courier New">
int funz(int x) {
return x++;
}
</font id="Courier New">

e il seguente codice nel main:
<font face="Courier New">
void main() {
...
var = 1;
k = funz(var);
}
</font id="Courier New">

Vorrei alcune delucidazioni.
1)in teoria essendo "var" globale potevo non passarla alla funzione "funz" e semplicemente richiamarla dìlì dentro giusto?

2)"k" dovrebbe contenere 2, giusto?

3)"var" dovrebbe contenere 2 o 1?

La vera domanda è appunto al 3. Io sapevo che quando si dichiara una variabile globale, tutte le funzioni o blocchi che ne fanno uso non ne creano un'istanza locale ma di isatnza ne esiste solo una. Quindi nel caso precedente "var" viene aumentata di 1 dentro "funz" ma ciò vale per l'unica istanza esistente di "var" quindi la stessa "var" diventerà 2! O no? Sto sbagliando io? Le variabili globali sono semplicemente visibili a tutto il file ma ogni funzione se ne crea un'stanza locale?

grazie

MessaggioInviato: dom set 12, 2004 7:17 pm
da Xerex
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da mciasco</i>
Vorrei alcune delucidazioni.
1)in teoria essendo "var" globale potevo non passarla alla funzione "funz" e semplicemente richiamarla dìlì dentro giusto?
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
Giusto, ma in quel modo perderesti l'utilità di usare funzioni
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote">
2)"k" dovrebbe contenere 2, giusto?
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
giusto.
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote">
3)"var" dovrebbe contenere 2 o 1?
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
var, sia prima che dopo la chiamata contiene 1.

<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote">
.... quindi la stessa "var" diventerà 2! O no? Sto sbagliando io? Le variabili globali sono semplicemente visibili a tutto il file ma ogni funzione se ne crea un'stanza locale?
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">

Il problemaè che il C utilizza il passaggio di parametri per valore, ovvero non c'è nessuna relazione tra il parametro attuale(var) e il parametro formale(x).

Per fare in modo che il valore di var venga modificato attraverso il formale x, devi utilizzare il passaggio di paramentri per riferimento che in C puoi simulare attraverso il passaggio alla funzione dell'indirizzo della variabile.

spero di essere stato esauriente
Ciao