Lezioni del modulo (2/2)
Passaggio per valore e riferimento
In C++, quando passi un argomento a una funzione, ci sono due modi principali per farlo: per valore o per riferimento.
Comprendere questa distinzione è fondamentale sia per la correttezza del programma sia per ottimizzare le prestazioni.
Passaggio per Valore (Copia)
Di default, C++ passa gli argomenti per valore. Questo significa che viene creata una copia del dato in memoria. Qualsiasi modifica effettuata all'interno della funzione non influenzerà la variabile originale all'esterno:
#include <iostream>
void increment(int n) {
n++; // Modifica solo la copia locale
}
int main() {
int x = 5;
increment(x);
std::cout << x << std::endl; // Stampa 5, x non è cambiata!
return 0;
}
Passaggio per Riferimento (&)
Se desideri che la funzione possa modificare la variabile originale, o se vuoi evitare di copiare oggetti di grandi dimensioni (come stringhe lunghe o vettori), devi usare il passaggio per riferimento.
Un riferimento si dichiara aggiungendo il simbolo & dopo il tipo del parametro:
#include <iostream>
void incrementRef(int& n) {
n++; // Modifica direttamente la variabile originale
}
int main() {
int x = 5;
incrementRef(x);
std::cout << x << std::endl; // Stampa 6!
return 0;
}
Il parametro int& n non è una copia, ma un alias (un riferimento diretto) per la variabile x passata al momento della chiamata.
Prova tu
Definisci una funzione doubleNumber con tipo di ritorno void che prende un riferimento a un intero n (usando int& n) e ne raddoppia il valore (n = n * 2). Chiamala nel main passandogli la variabile val inizializzata a 10, poi stampa val.
Mostra suggerimento
La firma della funzione usa il carattere `&`dopo il tipo per indicare un riferimento:`void doubleNumber(int& n)`.
Soluzione disponibile dopo 3 tentativi
Definisci una funzione swap che prende due riferimenti a intero a e b (int& a, int& b) e scambia i loro valori usando una variabile temporanea temp. Chiamala nel main per scambiare x e y, e poi stampali.
Mostra suggerimento
Usa `int temp = a; a = b; b = temp;` per scambiare i valori.
Soluzione disponibile dopo 3 tentativi