Vai al contenuto
eLearner.app
Modulo 3 · Lezione 2 di 28/18 nel corso~12 min
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:

Code
#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:

Code
#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

Esercizio#cpp.m3.l2.e1
Tentativi: 0Caricamento…

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.

Caricamento editor…
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

Esercizio#cpp.m3.l2.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

Usa `int temp = a; a = b; b = temp;` per scambiare i valori.

Soluzione disponibile dopo 3 tentativi