Fundamentos de C/C++

Funciones y paso de parámetros en C y C++

En esta lección vas a comparar tres formas de pasar parámetros a una función: por valor, por puntero y por referencia.

Introducción

Por defecto, cuando pasas una variable a una función, C y C++ crean una copia, así que los cambios hechos dentro de la función no afectan a la variable original. Si la función debe poder modificar el original, quien la llama tiene que permitirlo de forma explícita, con un puntero en C o una referencia en C++.

Puntos importantes

  • Activa los avisos del compilador (compiler warnings) y corrígelos todos.
  • Entiende bien el tipo y la vida útil (lifetime) de cada valor.
  • Comprueba siempre los datos de entrada y los límites de los índices de los arreglos.

Ejemplos de código C y C++

C
Ejecutar →
main.c
#include <stdio.h>

void swap_ints(int *left, int *right) {
    int temporary = *left;
    *left = *right;
    *right = temporary;
}

int main(void) {
    int a = 4, b = 9;
    swap_ints(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
}
Resultado de la ejecución
9 4
C++
Ejecutar →
main.cpp
#include <iostream>

void swap_ints(int& left, int& right) {
    int temporary = left;
    left = right;
    right = temporary;
}

int main() {
    int a = 4, b = 9;
    swap_ints(a, b);
    std::cout << a << ' ' << b << '\n';
}
Resultado de la ejecución
9 4

Comparación entre C y C++

En C, la función swap_ints recibe la dirección de las dos variables y usa el operador * para acceder a ellas e intercambiar sus valores. En C++, una referencia (reference) actúa como otro nombre de la variable original, así que la sintaxis es más corta y aun así modifica el valor. La palabra clave const en un parámetro indica que la función lee los datos sin modificarlos.

C

C usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.

C++

C++ sigue permitiendo trabajar a bajo nivel, pero añade tipos de biblioteca y abstracciones más seguras.

Ejercicios de práctica

Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.

  • Prueba entradas no válidas y valores límite.
  • Compila con las opciones -Wall -Wextra -Wpedantic para activar más avisos.
  • Pon las declaraciones comunes en un archivo de cabecera y la implementación en un archivo aparte.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos