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++
#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;
}
9 4
#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';
}
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 usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.
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.
- Distance Between Points Compute the straight-line distance between two points. Fácil
- Days in a Month Return how many days a month has, including leap years. Fácil