Demo: function pointer
Reinhard
Posts: 489
Hi,
one of C's strenght are function pointers.
Here a small demo for propgcc.
propeller-elf-gcc -o numdiff.elf -mlmm -Os -Wall main.c -lm
best regards,
Reinhard
one of C's strenght are function pointers.
Here a small demo for propgcc.
#include <stdio.h>
#include <stdlib.h>
// this is a new type, a pointer to a function
typedef double (*function_pointer)(double x);
/**
* Differentiate any given Function at point x.
* @param f: function to differentiate, thats a pointer to a function
* @param x: double the argument where to differentiate
* @return: double with the value of f'(x)
*/
// note there is one differentiate function !!!
// we can call it, with any argument from type double ((*f)(double),double)
double differentiate(double (*f)(double), double x)
{
double h = 0.0001;
return (f(x+h)-f(x-h))/(2*h);
}
double xsquare(double x) // user defined function
{
return x*x;
}
double cube(double x) // user defined function
{
return x*x*x;
}
int main(int argc, char *argv[])
{
double x;
function_pointer fcp; // we make a variable from type function_pointer
printf("differentiate the cube\n");
fcp = cube; // point to the function cube
for(x = 0;x < 1; x+=0.1)
{
printf("x=%f x*x*x=%f, 3*x*x=%f, f'= %f\n",
x, fcp(x), 3*x*x, differentiate(fcp,x));
}
printf("\ndifferentiate the square\n");
fcp = xsquare; //point to the function xsquare
for(x = 0;x < 1; x+=0.1)
{
printf("x=%f x*x=%f, 2*x=%f, f'= %f\n",
x, fcp(x), 2*x, differentiate(fcp,x));
}
return EXIT_SUCCESS;
}
propeller-elf-gcc -o numdiff.elf -mlmm -Os -Wall main.c -lm
best regards,
Reinhard
