Programación en C: Pasar direcciones y punteros a funciones – Guía práctica
Programación en C: Pasar direcciones y punteros a funciones
Domine cómo pasar direcciones de memoria y punteros a funciones en C, con ejemplos claros y explicaciones expertas.
En C, pasar una dirección en lugar de un valor permite a una función manipular directamente la variable original. Esta técnica, llamada paso por referencia, es esencial para código eficiente y para modificar datos entre ámbitos.
Ejemplo 1: Intercambiar dos enteros por referencia
#include <stdio.h>
void swap(int *n1, int *n2);
int main(void) {
int num1 = 5, num2 = 10;
/* Pasar las direcciones de num1 y num2 */
swap(&num1, &num2);
printf("num1 = %d\n", num1);
printf("num2 = %d", num2);
return 0;
}
void swap(int *n1, int *n2) {
int temp = *n1;
*n1 = *n2;
*n2 = temp;
}
Ejecutar este programa produce:
num1 = 10 num2 = 5
La función swap() recibe punteros n1 y n2 que apuntan a las variables originales num1 y num2. Al desreferenciar estos punteros (*n1 y *n2), la función intercambia los valores reales almacenados en memoria, por eso main() ve los números actualizados. Observe que swap() devuelve void porque modifica sus argumentos directamente.
Ejemplo 2: Incrementar un valor mediante un puntero
#include <stdio.h>
void addOne(int *ptr) {
(*ptr)++; /* Incrementar el valor en la dirección dada */
}
int main(void) {
int i = 10;
int *p = &i;
addOne(p);
printf("%d", *p); /* Imprime 11 */
return 0;
}
Aquí, p contiene la dirección de i. La función addOne() recibe esa misma dirección, la desreferencia e incrementa el valor subyacente. Después de la llamada, *p (y por consiguiente i) refleja el nuevo valor de 11.
Estos ejemplos ilustran el poder del paso por puntero: las funciones pueden alterar variables definidas fuera de su ámbito, permitiendo manipulación eficiente de datos sin copias innecesarias.
Lenguaje C
- Entendiendo palabras clave e identificadores en C#: Reglas, listas y mejores prácticas
- Dominando operadores bit a bit y de desplazamiento en C#: Guía completa
- Clases y objetos en C#: Fundamentos para POO robusta
- Dominando clases y métodos abstractos en C#: Guía práctica
- Entendiendo clases y métodos parciales en C#
- Dominando clases y métodos sealed en C#: Cuándo usarlos, ejemplos claros y mejora de seguridad y rendimiento
- Cómo pasar arrays 1D y 2D a funciones en C – Guía práctica
- Dominando punteros en C: Tutorial práctico guiado por expertos
- Entendiendo la relación entre arrays y punteros en C
- Dominando structs y punteros en C: Guía práctica
- Entendiendo constantes y literales en C: Tipos, uso y mejores prácticas