Passaggio per variabile

Piuttosto che passare dei valori si può scegliere di passare delle variabili (indirizzi, reference, …).

Il sottoprogramma B svolgerà l’operazione per la quale è stato progettato utilizzando a, il parametro attuale, ogni volta che nel suo codice compare x, il parametro formale.

sub_var

Si dice che x è solo un reference, un riferimento, per a.
Analogamente per l’uso di b piuttosto che di y.

IntestazioneChiamata
Cvoid B(int *x, double *y)B(&a, &b);
C++void B(int &x, double &y)B(a, b);
PascalProcedure B(Var x: Integer; Var y: Double);B(a, b);
Visual BasicSub B(ByRef x As Integer, ByRef y As Double)
Sub B(x As Integer, y As Double)
Call B(a, b)

Note

  1. gli effetti dell’esecuzione del sottoprogramma B si manifestano nei valori contenuti nelle variabili utilizzate come parametri attuali all’atto della chiamata
  2. i parametri attuali devono essere variabili
  3. Visual Basic applica di default la modalità ByRef (by reference)
  4. C++ aggiunge una sintassi semplificata rispetto a quella adottata in C
  5. Java, Python, non prevededono il passaggio dei parametri per riferimento

Le due modalità di passaggio dei parametri (per valore, per riferimento) possono essere utilizzate contemporaneamente…

sub_var_value

Alla fine dell’esecuzione del sottoprogramma B il valore di a, nel sottoprogramma A, dipenderà dalle operazioni che sono state eseguite su x in B

IntestazioneChiamata
Cvoid B(int *x, double y)B(&a, b);
C++void B(int &x, double y) B(a, b);
PascalProcedure B(Var x: Integer; y: Double);B(a, b);
Visual BasicSub B(ByRef x As Integer, ByVal y As Double)
Sub B(x As Integer, ByVal y As Double)
Call B(a, b)