Funzioni C++: passaggio per riferimento
Esistono diversi modi in cui i dati (o le variabili) possono essere inviati come argomento a una funzione. Due di quelli comuni sono Passaggio per valore e Passaggio per riferimento. Il passaggio per riferimento consente a una funzione di modificare una variabile senza crearne una copia. Dobbiamo dichiarare le variabili di riferimento. La posizione di memoria della variabile e del parametro passati è la stessa. Pertanto, qualsiasi modifica al parametro si riflette anche nella variabile all'interno della sua funzione genitore. Questo articolo si concentra sulla discussione su come passare variabili per riferimento in C++.
Che cos'è un passaggio per riferimento?
Quando una variabile viene passata come riferimento a una funzione, l'indirizzo della variabile viene memorizzato in una variabile puntatore all'interno della funzione. Pertanto, la variabile all'interno della funzione è un alias per la variabile passata. Pertanto, qualsiasi operazione eseguita sulla variabile all'interno della funzione si rifletterà anche nella funzione chiamante.
- Questa capacità di riflettere le modifiche potrebbe restituire più di un valore per una funzione.
- Inoltre, una funzione void potrebbe tecnicamente restituire valore/i utilizzando questo metodo.
IL & L'operatore (indirizzo di) denota valori passati tramite passaggio per riferimento in una funzione. Di seguito è riportato il programma C++ per implementare il pass-by-reference:
C++
// C++ program to implement> // pass-by-reference> #include> using> namespace> std;> > void> f(> int> & x)> {> > x--;> }> > // Driver code> int> main()> {> > int> a = 5;> > cout < < a < < endl;> > f(a);> > cout < < a < < endl;> }> |
Produzione
5 4
Spiegazione:
- Innanzitutto una funzione viene definita con il tipo di dati restituito void e assume valore per riferimento (come indicato da & segno dell'indirizzo nei parametri formali).
- La funzione decrementa il valore del suo parametro formale di 1.
- Dopodiché, all'interno della funzione main, una variabile intera denominata UN viene inizializzato con il valore 5.
- Il valore di 'a' è stampato sulla console. Viene chiamata la funzione f() e la variabile viene passata come argomento.
- All'interno della funzione, il valore della variabile viene diminuito di 1.
- Al ritorno dalla funzione viene nuovamente visualizzato il valore della variabile, che risulta essere 1 in meno rispetto al valore originale.
Pertanto, le modifiche apportate a una variabile passata tramite riferimento a una funzione si riflettono nella funzione chiamante.
Funzione di scambio tramite Pass-By-Reference
La funzione swap scambia i valori delle due variabili che riceve come argomenti. Di seguito è riportato il programma C++ per scambiare i valori di due variabili utilizzando il pass-by-reference.
C++
// C++ program to swap the values> // of two variables using> // pass-by-reference> #include> > // Prototype of the function> void> swap(> int> &,> int> &);> > // Driver code> int> main()> {> > int> x, y;> > > // Inputting two variables> > printf> (> 'Enter the value of x and y
'> );> > scanf> (> '%d%d'> , &x, &y);> > > // Displaying their values before swapping> > printf> (> 'Before Swapping
x = %d
y = %d
'> ,> > x, y);> > > // Calling the function & sending variable> > // values as argument> > swap(x, y);> > > // Displaying their values after swapping> > printf> (> 'After Swapping
x = %d
y = %d
'> ,> > x, y);> > return> 0;> }> > // Function uses pass by reference method> // to swap passed variable values> void> swap(> int> &a,> int> &b)> {> > int> temp;> > > temp = b;> > b = a;> > a = temp;> }> |
Produzione:
Spiegazione:
- Per prima cosa viene definito il prototipo della funzione (facoltativo se la funzione è definita prima della funzione principale).
- All'interno della funzione main, i valori delle due variabili vengono presi come input dall'utente.
- I valori prima di chiamare la funzione swap vengono stampati sulla console.
- Dopodiché, i valori vengono passati come argomento alla funzione di scambio.
- La funzione swap utilizza call-by-reference e contiene il codice per scambiare le due variabili.
- Al termine della funzione, il valore delle due variabili viene visualizzato nella funzione principale (dopo la chiamata allo swap).
- I valori scambiati vengono visualizzati sullo schermo.
Passa per riferimento con i puntatori
È anche possibile passare l'indirizzo della variabile dalla funzione chiamante e usarli come puntatore all'interno della funzione chiamata. Ciò consente un po' più esplicitamente la modifica dei valori delle variabili nella funzione.
Di seguito è riportato il programma C++ per implementare il pass-by-reference con i puntatori:
C++
// C++ program to implement> // pass-by-reference with> // pointers> #include> using> namespace> std;> > void> f(> int> *x)> {> > *x = *x - 1;> }> > // Driver code> int> main()> {> > int> a = 5;> > cout < < a < < endl;> > f(&a);> > cout < < a < < endl;> }> |
Produzione
5 4
Spiegazione:
- Innanzitutto una funzione viene definita con il tipo di dati restituito void e assume valore come puntatori (come indicato con * asterisco accedere ai parametri formali).
- La funzione decrementa il valore del suo parametro formale di 1.
- Dopodiché, all’interno della funzione main, una variabile intera denominata “a” viene inizializzata con il valore 5.
- Quindi viene visualizzato questo valore. Viene chiamata la funzione e l'indirizzo della variabile viene passato come argomento.
- All'interno della funzione, il valore della variabile puntatore viene decrementato di 1.
- Al ritorno dalla funzione viene nuovamente visualizzato il valore della variabile, che risulta essere 1 in meno rispetto al valore originale.