Paso por referencia
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 41 de 56.
Cuando pasas argumentos a las funciones, C++ normalmente crea copias de los valores. Esto significa que los cambios dentro de la función no afectan a las variables originales. El paso por referencia cambia este comportamiento al permitir que las funciones trabajen directamente con las variables originales.
Para pasar por referencia, añade el símbolo & después del tipo de parámetro en la declaración de tu función:
void doubleValue(int& number) {
number = number * 2; // Modifica la variable original
}Cuando llamas a esta función, cualquier cambio realizado en el parámetro dentro de la función modificará directamente la variable original que se pasó. Esto es especialmente útil cuando quieres que una función modifique sus argumentos o cuando se trabaja con objetos grandes donde realizar una copia sería ineficiente.
El paso por referencia elimina la sobrecarga de copiar datos, haciendo que sus programas sean más rápidos y eficientes en el uso de la memoria, especialmente con estructuras de datos complejas como vectores o mapas.
Desafío
FácilCrea una función que demuestre el paso por referencia modificando variables directamente a través de los parámetros de la función. Este desafío pondrá a prueba tu comprensión de cómo el símbolo & permite que las funciones trabajen con las variables originales en lugar de copias.
Se proporcionarán las siguientes entradas:
- Un entero
value1que representa el primer número - Un entero
value2que representa el segundo número - Un entero
value3que representa el tercer número
Tu programa debe:
- Crear una función llamada
tripleValuesque tome tres parámetros enteros por referencia - Dentro de la función, multiplicar cada parámetro por 3
- En la función principal, leer los tres valores de entrada y almacenarlos en variables
- Imprimir los valores originales antes de llamar a la función
- Llamar a la función
tripleValuescon las tres variables - Imprimir los valores modificados después de la llamada a la función para mostrar que fueron cambiados
Utiliza el siguiente formato de salida exacto:
Antes de la llamada a la función:
Original values: [value1] [value2] [value3]Después de la llamada a la función:
Tripled values: [new_value1] [new_value2] [new_value3]La firma de la función debe usar el símbolo & después de cada tipo de parámetro para indicar el paso por referencia: void tripleValues(int& a, int& b, int& c). Esto permite que la función modifique directamente las variables originales que se le pasan, demostrando la diferencia clave entre el paso por valor y el paso por referencia. Las variables en main cambiarán permanentemente después de la llamada a la función, demostrando que la función trabajó con las ubicaciones de memoria originales en lugar de copias.
Hoja de referencia
Para pasar por referencia en C++, añade el símbolo & después del tipo de parámetro en la declaración de tu función:
void doubleValue(int& number) {
number = number * 2; // Modifica la variable original
}El paso por referencia permite que las funciones trabajen directamente con las variables originales en lugar de copias. Los cambios realizados en los parámetros dentro de la función modificarán las variables originales que se pasaron.
Esto elimina la sobrecarga de copiar datos, haciendo que los programas sean más rápidos y eficientes en términos de memoria, especialmente con estructuras de datos complejas como vectores o mapas.
Pruébalo tú mismo
#include <iostream>
using namespace std;
// TODO: Crea la función tripleValues aquí
int main() {
// Leer valores de entrada
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// Imprimir valores originales
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO: Llama a la función tripleValues aquí
// Imprimir valores modificados
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea