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.

Si dice che x è solo un reference, un riferimento, per a.
Analogamente per l’uso di b piuttosto che di y.
Intestazione | Chiamata | |
---|---|---|
C | void B(int *x, double *y) | B(&a, &b); |
C++ | void B(int &x, double &y) | B(a, b); |
Pascal | Procedure B(Var x: Integer; Var y: Double); | B(a, b); |
Visual Basic | Sub B(ByRef x As Integer, ByRef y As Double) Sub B(x As Integer, y As Double) | Call B(a, b) |
Note
- gli effetti dell’esecuzione del sottoprogramma B si manifestano nei valori contenuti nelle variabili utilizzate come parametri attuali all’atto della chiamata
- i parametri attuali devono essere variabili
- Visual Basic applica di default la modalità ByRef (by reference)
- C++ aggiunge una sintassi semplificata rispetto a quella adottata in C
- 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…

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
Intestazione | Chiamata | |
---|---|---|
C | void B(int *x, double y) | B(&a, b); |
C++ | void B(int &x, double y) | B(a, b); |
Pascal | Procedure B(Var x: Integer; y: Double); | B(a, b); |
Visual Basic | Sub B(ByRef x As Integer, ByVal y As Double) | Call B(a, b) |