Passaggio dei parametri per indirizzo o riferimento

Passaggio dei parametri per indirizzo o riferimento

Quando il passaggio dei parametri da programma chiamante a sottoprogramma avviene per riferimento, ogni modifica apportata dal sottoprogramma ai parametri formali si ripercuote anche sui parametri attuali. Perché ciò avvenga è necessario che al sottoprogramma siano passati non i valori da elaborare ma gli indirizzi di memoria di questi valori. In questo modo il sottoprogramma lavora non sulla riproduzione dei parametri attuali nei parametri formali ma sugli stessi parametri attuali pur facendovi riferimento con nomi di variabile diversi (quello dei parametri formali).

In questo caso la chiamata all'ipotetica funzione funzy potrebbe essere:

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

É immediatamente evidente come, in questo modo il programma chiamante passa alla funzione non il valore delle variabili ma il loro indirizzo. La dichiarazione della funzione funzy deve essere:

float funzy(int *x, int *y)
ricevendo, come parametro formale, non il valore delle variabili x e y, ma i puntatori a queste. Nella funzione si dovranno poi utilizzare x e y sempre facendole precedere dal simbolo *. Per meglio comprendere quanto detto vediamo l'esempio di un programma che richiama una funzione destinata a scambiare il valore di due variabili di tipo intero.

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

void scambia(int *a, int* b)
{    int temp;
     temp = *a;
     *a = *b;
     *b = temp;
}

int main()
{     int x, y;

      printf("Inserisci il primo numero: "); scanf("%d",&x);
      printf("Inserisci il scondo numero: "); scanf("%d",&y);
      
      printf("\nPrimo numero: %2d\n",x);
      printf("Primo numero: %2d\n",y);

      printf("\nEffettuo lo scambio \n");
      scambia (&x,&y);
      
      printf("Primo numero: %2d\n",x);
      printf("Primo numero: %2d\n\n",y);      
      
      system("PAUSE");
      return 0;
}

È possibile semplificare l'uso della sintassi delle funzioni che ricevono gli indirizzi dal programma chiamante. Riprendiamo l'esempio dello scambio delle due variabili modificandolo in questo senso.

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

void scambia(int& a, int& b)
{    int temp;
     temp = a;
     a = b;
     b = temp;
}

int main()
{     int x, y;

      printf("Inserisci il primo numero: "); scanf("%d",&x);
      printf("Inserisci il scondo numero: "); scanf("%d",&y);
      
      printf("\nPrimo numero: %2d\n",x);
      printf("Primo numero: %2d\n",y);

      printf("\nEffettuo lo scambio \n");
      scambia (x,y);
      
      printf("Primo numero: %2d\n",x);
      printf("Primo numero: %2d\n\n",y);      
      
      system("PAUSE");
      return 0;
}
In questo nuovo caso possiamo dire che il trasferimento dei parametri, che nel primo esempio è avvenuto esplicitamente per indirizzo, è fatto per riferimento (reference).

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

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