Entonces, el código a continuación se puede usar para pasar una función como parámetro:
void printNumber(int nbr)
{
printf("%d\n", nbr);
}
void myFunction(void (*f)(int))
{
for(int i = 0; i < 5; i++)
{
(*f)(i);
}
}
int main(void)
{
myFunction(printNumber);
return (0);
}
Pero, ¿cómo puedo cambiar ese código para que el entero para "printNumber" se defina fuera de "myFunction"? En otras palabras, solo quiero llamar a la función "myFunction" por x número de veces con el mismo número entero.
Escribí algunos pseudocódigo para explicar lo que estoy tratando de lograr:
void printNumber(int nbr)
{
printf("%d\n", nbr);
}
void myFunction(void (*f)(*int)) //pseudocode
{
for(int i = 0; i < 5; i++)
{
(*f)(*int); //pseudocode
}
}
int main(void)
{
myFunction(printNumber(5)); //pseudocode
return (0);
}
2 respuestas
printnumber(5)
significa llamar a printnumber
inmediatamente y pasarlo 5. Desea pasar printnumber
y 5
por separado como dos argumentos
void printNumber(int nbr)
{
printf("%d\n", nbr);
}
// void (*f)(int) is a pointer to a function that takes an int
// arg is the int to pass in
void myFunction(void (*f)(int), int arg)
{
for(int i = 0; i < 5; i++)
{
// call f and pass in arg
(*f)(arg);
}
}
int main(void)
{
// pass the function and the arg to use
myFunction(printNumber, 5);
return (0);
}
Necesitas otro argumento.
void printNumber(int nbr)
{
printf("%d\n", nbr);
}
void myFunction(void (*f)(int), int Arg)
{
for(int i = 0; i < 5; i++)
{
(*f)(Arg);
}
}
int main(void)
{
myFunction(printNumber, 42);
return (0);
}
La declaración de parámetro void (*f)(int)
solo dice que la función apuntada por f
espera un int
. No significa que un int
también esté empaquetado en el puntero de la función de alguna manera.
Preguntas relacionadas
Nuevas preguntas
c
C es un lenguaje de programación de uso general utilizado para la programación del sistema (SO e integrado), bibliotecas, juegos y multiplataforma. Esta etiqueta debe usarse con preguntas generales sobre el lenguaje C, como se define en el estándar ISO 9899 (la última versión, 9899: 2018, a menos que se especifique lo contrario; también etiquete las solicitudes específicas de la versión con c89, c99, c11, etc.). C es distinto de C ++ y no debe combinarse con la etiqueta C ++ en ausencia de una razón racional.