Passaggio dei parametri per valore

Nel passaggio per valore il sottoprogramma riceve il valore da elaborare attraverso il passaggio dal parametro attuale (specificato nel programma chiamante) al parametro formale (specificato nella dichiarazione del sottoprogramma). Nell'esempio proposto i valori delle variabili pa1 e pa2 (parametri attuali) vengono copiati rispettivamente in pf1 e pf2 (parametri formali).

Questo tipo di passaggio di parametri non consente al sottoprogramma di modificare il valore dei parametri attuali. Il sottoprogramma può modificare i parametri formali ma, al momento del ritorno al programma chiamante, i parametri attuali avranno conservato il valore che avevano al momento della chiamata al sottoprogramma.

Per completare quanto detto occorre descrivere le chiamate e le dichiarazioni dei sottoprogrammi (nel nostro caso funzioni) relative al passaggio dei parametri.

In un passaggio per valore, un possibile esempio di chiamata per una ipotetica funzione di nome funzy potrebbe essere:

int a, b;
float c;
.......
.......
a = funzy(b, c)
...........

dove b e c sono i parametri attuali. La dichiarazione iniziale di a e b è stata aggiunta in quanto è necessario notare che, nella dichiarazione, la funzione funzy deve essere:

float funzy(int x, int y)

I parametri formali x e y devono corrispondere, oltre che nel numero, anche nel tipo a quelli attuali della chiamata. Da rilevare anche che la funzione è dichiarata come float perché restituisce un valore di tipo float, come la variabile a del programma. Nella funzione l'istruzione di ritorno, per es.

return y 

deve restituire un valore di tipo float che, come già detto, è il valore assunto da funzy(a,b) e viene assegnato alla variabile a.

La funzione può anche non richiedere parametri dal programma chiamante, in questo caso avremo la chiamata

a = funzy();

e una dichiarazione del tipo

float funzy()

o potrebbe non restituire un valore al programma chiamante. In questo caso avremo una chiamata del tipo

funzy(a,b);
senza che vi sia assegnazione o uso della funzione in un'espressione, e una dichiarazione della funzione come void (insieme vuoto):
void funzy(int a, int b)
Concludiamo la descrizione delle funzioni parametriche in C con un semplice programma che calcola il MCD con l'algoritmo di Euclide.
// Calcolo del MCD tra due numeri con l'algoritmo di Euclide 
// MCD(n,m)

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

int mcd(int n,int m)
{  int dividendo, divisore, resto;

   do
   { resto = n % m;
     if (!resto)
        return m;
     else
     {   n = divisore;
         m = resto;
     }
   } while (resto == 0);  
}

int main()
{   int n, m;

    printf("Inserisci il primo numero: ");
    scanf("%d2", &n);   
    printf("Inserisci il secondo numero: ");
    scanf("%d2", &m);
    
    printf("Il MCD tra %2d e %2d e': %2d\n", n, m ,mcd(n,m));

    system("PAUSE");
    return 0;
}

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

Torna all'indice delle lezioni
Ultima modifica: 27/04/2010