Lecciones del módulo (2/2)
Paso por valor y referencia
En C++, cuando pasas un argumento a una función, hay dos formas principales de hacerlo: por valor o por referencia.
Comprender esta distinción es fundamental tanto para la corrección del programa como para optimizar el rendimiento.
Paso por Valor (Copia)
De forma predeterminada, C++ pasa los argumentos por valor. Esto significa que se crea una copia del dato en memoria. Cualquier modificación realizada dentro de la función no afectará a la variable original en el exterior:
#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;
}
Paso por Referencia (&)
Si deseas que la función pueda modificar la variable original, o si quieres evitar copiar objetos grandes (como cadenas largas o vectores), debes utilizar el paso por referencia.
Una referencia se declara agregando el símbolo & después del tipo de parámetro:
#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;
}
El parámetro int& n no es una copia, sino un alias (una referencia directa) para la variable x pasada en el momento de la llamada.
Pruébalo tú mismo
Define una función doubleNumber con tipo de retorno void que tome una referencia a un entero n (usando int& n) y duplique su valor (n = n * 2). Llámala en el main pasándole la variable val inicializada a 10, luego imprime val.
Mostrar pista
La firma de la función utiliza el carácter `&`después del tipo para indicar una referencia:`void doubleNumber(int& n)`.
Solución disponible después de 3 intentos
Define una función swap que tome dos referencias a entero a y b (int& a, int& b) y intercambie sus valores usando una variable temporal temp. Llámala en el main para intercambiar x y y, y luego imprímelos.
Mostrar pista
Usa `int temp = a; a = b; b = temp;` para intercambiar los valores.
Solución disponible después de 3 intentos