Llamada por referencia en C++ usando punteros: ejemplos prácticos
Llamada por referencia en C++ usando punteros: ejemplos prácticos
Esta guía explica cómo pasar argumentos por referencia en C++ usando punteros, con ejemplos de código claros que demuestran el intercambio de valores y más.
En el mundo de las funciones de C++, la forma predeterminada de pasar datos es por valor: la función recibe una copia de los datos originales. Si bien esto protege la variable original, puede ser ineficiente para objetos grandes e impide que la función modifique los datos del llamador.
Pasar por referencia resuelve ambos problemas. En lugar de copiar los datos, la función recibe una referencia (o dirección) a la variable original, permitiendo su manipulación directa. Esto se logra de dos formas equivalentes: usando referencias de C++ o punteros crudos. Entender ambos enfoques le da flexibilidad y una visión más profunda del manejo de memoria.
// Función que toma un valor
void func1(int numVal) {
// código
}
// Función que toma una referencia (sintaxis de referencia de C++)
void func2(int &numRef) {
// código
}
int main() {
int num = 5;
// Pasar por valor
func1(num);
// Pasar por referencia
func2(num);
return 0;
}
El & en void func2(int &numRef) indica que el parámetro es una referencia. Cuando se llama a func2, se pasa la dirección de num, no su valor, permitiendo que la función modifique num directamente.

Ejemplo 1: Intercambio de valores con referencias de C++
#include <iostream>
using namespace std;
// Función de intercambio usando referencias
void intercambiar(int &n1, int &n2) {
int temp = n1;
n1 = n2;
n2 = temp;
}
int main() {
int a = 1, b = 2;
cout << "Antes de intercambiar\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
intercambiar(a, b);
cout << "\nDespués de intercambiar\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
return 0;
}
Salida
Antes de intercambiar a = 1 b = 2 Después de intercambiar a = 2 b = 1
En este ejemplo, intercambiar recibe dos referencias. Como n1 y n2 son alias de a y b, los cambios dentro de la función afectan a las variables originales.
Ejemplo 2: Intercambio de valores con punteros
#include <iostream>
using namespace std;
// Prototipo de función usando punteros
void intercambiar(int*, int*);
int main() {
int a = 1, b = 2;
cout << "Antes de intercambiar\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
// Pasar direcciones de a y b
intercambiar(&a, &b);
cout << "\nDespués de intercambiar\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
return 0;
}
// Función de intercambio usando punteros
void intercambiar(int* n1, int* n2) {
int temp = *n1;
*n1 = *n2;
*n2 = temp;
}
Salida
Antes de intercambiar a = 1 b = 2 Después de intercambiar a = 2 b = 1
Aquí, intercambiar acepta punteros crudos. Al desreferenciar con *, la función accede y modifica los valores en las direcciones proporcionadas. El resultado es idéntico a la versión con referencias, pero la sintaxis de punteros hace el paso de direcciones explícito.
La elección entre referencias y punteros depende del contexto: las referencias ofrecen sintaxis más segura y limpia, mientras que los punteros proporcionan control explícito sobre direcciones de memoria y son necesarios para asignación dinámica.
Lenguaje C
- 13 Tipos de Malware en 2021: Amenazas, Ejemplos y Prevención
- 5 Modelos de Centros de Datos Explicados: Diseño, Casos de Uso y Ejemplos
- Explorando 8 Tendencias Tecnológicas Clave de 2021 con Ejemplos Reales
- Dominando las Sentencias Using en C#: Importaciones, Alias y Directivas Estáticas
- Dominando los Operadores en C++: Guía Completa con Ejemplos Prácticos
- Comentarios en C++: Mejores Prácticas para Código Legible y Mantenible
- Dominando las plantillas de clase en C++: guía práctica
- Dominando punteros en C: Tutorial práctico guiado por expertos
- Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
- Dominando punteros en C: Pasos prácticos para programación avanzada
- Lenguaje de Programación C++: Visión General y Características Clave