Declaración de punteros a funciones
Punteros a funciones
Declaración de punteros a funciones es una lección gratuita de C Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.
Las funciones tienen direcciones
Al igual que los datos, cada función se encuentra en una dirección de memoria. Un puntero a función almacena esa dirección para que pueda llamar a la función indirectamente.
#include <stdio.h>
void greet(void) { printf("hello\n"); }
int main(void) {
void (*fp)(void) = greet;
fp();
return 0;
}Leer la declaración
La declaración int (*fp)(int) significa que fp es un puntero a una función que recibe un int y devuelve un int.
Los paréntesis alrededor de *fp son obligatorios.
#include <stdio.h>
int square(int x) { return x * x; }
int main(void) {
int (*fp)(int) = square;
printf("%d\n", fp(5));
return 0;
}Asignar una función
El nombre de una función se convierte en su dirección, por lo que fp = square y fp = &square son equivalentes.
#include <stdio.h>
int dbl(int x) { return x * 2; }
int main(void) {
int (*fp)(int);
fp = &dbl;
printf("%d\n", fp(7));
return 0;
}Llamar mediante el puntero
Puede llamar mediante un puntero a función usando fp(args) o la forma explícita (*fp)(args). Ambas hacen lo mismo.
#include <stdio.h>
int add1(int x) { return x + 1; }
int main(void) {
int (*fp)(int) = add1;
printf("%d\n", fp(10));
printf("%d\n", (*fp)(10));
return 0;
}La firma debe coincidir
El tipo de un puntero a función incluye el tipo de retorno y los tipos de los parámetros. Solo puede asignarle una función cuya firma coincida exactamente.
#include <stdio.h>
double half(double x) { return x / 2.0; }
int main(void) {
double (*fp)(double) = half;
printf("%f\n", fp(9.0));
return 0;
}Reasignar durante la ejecución
Un puntero a función es una variable, por lo que puede apuntar a distintas funciones mientras el programa se ejecuta.
#include <stdio.h>
int inc(int x) { return x + 1; }
int dec(int x) { return x - 1; }
int main(void) {
int (*op)(int) = inc;
printf("%d\n", op(5));
op = dec;
printf("%d\n", op(5));
return 0;
}Elegir según una condición
Seleccione la función que se llamará según un valor obtenido durante la ejecución y, después, invoque la función mediante un único puntero.
#include <stdio.h>
int plus(int a) { return a + 10; }
int minus(int a) { return a - 10; }
int main(void) {
int up = 1;
int (*op)(int) = up ? plus : minus;
printf("%d\n", op(100));
return 0;
}typedef para mejorar la legibilidad
La sintaxis de los punteros a función es extensa. Un typedef asigna un nombre al tipo y hace más claras las declaraciones.
#include <stdio.h>
typedef int (*IntOp)(int);
int triple(int x) { return x * 3; }
int main(void) {
IntOp op = triple;
printf("%d\n", op(4));
return 0;
}Funciones de dos argumentos
Los punteros a función pueden describir cualquier firma. Este es un ejemplo para una operación binaria con enteros.
#include <stdio.h>
int sum(int a, int b) { return a + b; }
int main(void) {
int (*op)(int, int) = sum;
printf("%d\n", op(3, 4));
return 0;
}Un puntero a función nulo
Al igual que los punteros a datos, un puntero a función puede ser NULL. Compruebe siempre el puntero antes de llamar a una función que podría no estar asignada.
#include <stdio.h>
int twice(int x) { return x * 2; }
int main(void) {
int (*op)(int) = NULL;
if (op == NULL) op = twice;
if (op) printf("%d\n", op(8));
return 0;
}Imprimir la dirección
Puede inspeccionar la dirección almacenada. Las distintas funciones tienen direcciones diferentes.
#include <stdio.h>
int f(int x) { return x; }
int main(void) {
int (*fp)(int) = f;
printf("function pointer is %s\n", fp ? "set" : "null");
return 0;
}Comprobación rápida
Compruebe su comprensión de las declaraciones de punteros a función.
Resumen
Ha aprendido a declarar y usar punteros a función:
- Sintaxis:
ret (*name)(params), con paréntesis obligatorios. - Asigne usando el nombre de la función, que se convierte en una dirección.
- Llame con
fp(args)o(*fp)(args). - La firma debe coincidir;
typedefmejora la legibilidad.
Preguntas frecuentes
¿La lección «Declaración de punteros a funciones» es gratis?
Sí — el texto completo de «Declaración de punteros a funciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Declaración de punteros a funciones»?
Punteros a funciones Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Declaración de punteros a funciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Declaración de punteros a funciones
- Paso de funciones
- qsort con comparadores
- Tablas de punteros a funciones