Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Crea 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 value1 que representa el primer número
  • Un entero value2 que representa el segundo número
  • Un entero value3 que representa el tercer número

Tu programa debe:

  1. Crear una función llamada tripleValues que tome tres parámetros enteros por referencia
  2. Dentro de la función, multiplicar cada parámetro por 3
  3. En la función principal, leer los tres valores de entrada y almacenarlos en variables
  4. Imprimir los valores originales antes de llamar a la función
  5. Llamar a la función tripleValues con las tres variables
  6. 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;
}
quiz iconPonte a prueba

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