Parametri delle funzioni, variabili localo e globali

Il compilatore opera una precisa distinzione tra l'ambiente dedicato al programma e quello dedicato ai sottoprogrammi. Il sottoprogramma però può avere bisogno dei dati prodotti dal programma chiamante e il programma chiamante deve ottenere i risultati dell'elaborazione compiuta dal sottoprogramma. Ecco allora che è possibile definire quali e quanti dati il programma deve passare alla funzione e viceversa.

Possiamo sintetizzare quanto già detto con la seguente formula: è possibile stabilire a quali variabili può accedere la funzione chiamata, quali può modificare stabilmente e di quali può utilizzare il valore ma non modificarlo.

Questa definizione dell'accesso alle variabili è fatta dal programmatore attraverso la dichiarazione dei parametri e dalla distinzione tra variabili dichiarate nella funzione, e quindi variabili locali, e quelle dichiarate fuori dalla funzione, e quindi variabili globali.

Per chiarire il concetto di variabili globali e variabili locali, vediamo un esempio:

			main()
			{	int a, b, c, d, x ....
				......
				......
				x = funzA(pa1, pa2);
				....
				....
	
			}
			
			funzA(int pf1, int pf2)
			{	int d, f, g ...
				.....
				return g; 
			}
			

In questo esempio a, b, c, d sono variabili globali, mentre d, f, g sono variabili locali. Il programma chiamante (main) non vede (quindi non può utilizzare) le variabili d, f, g del sottoprogramma che sono variabili locali. Il sottoprogramma può invece utilizzare d, f e g oltre a tutte le variabili (tranne d) del programma chiamante perché queste sono variabili globali.

É opportuno notare che la variabile d è presente sia come variabile locale della funzione funzA() che come variabile globale del programma principale. In questo caso i due identificatori omonimi fanno riferimento a variabili diverse, il valore della variabile d a cui fa riferimento il programma principale è distinto dal valore della variabile d a cui fa riferimento la funzione.

Ancora, il valore della variabile g, visibile solo al sottoprogramma, è passato al programma chiamante attraverso l'assegnazione x=funzA(). Il programma chiamante dispone quindi di questo valore, dopo l'esecuzione del sottoprogramma, all'interno della variabile x. il valore di x è il risultato della funzione.

Il programma chiamante e il sottoprogramma comunicano anche attraverso quelli che sono i parametri (nel nostro esempio pa1->pf1, pa2->pf2) che vengono passati dal primo al secondo durante la chiamata e che possono essere restituiti, dopo essere stati modificati, alla fine dell'elaborazione dal programma chiamato a quello chiamante.

Perché possa essere realizzato il meccanismo di comunicazione attraverso i parametri occorre che i parametri presenti nella chiamata, detti parametri attuali (pa1 e pa2 nel nostro esempio) corrispondano in numero e tipo a a quello presenti nell'intestazione del sottoprogramma che sono denominati parametri formali (pf1 e pf2 nel nostro esempio).

I parametri possono essere passati in due distinte modalità dal programma chiamante a quello chiamato. Queste diverse modalità sono conosciute come:

  • passaggio per valore
  • passaggio per riferimento

Scrivi email per il tutor dei corsi
Scrivi email per l'amministratore del sito

Torna all'indice del corso
Ultima modifica: 27/04/2010