Re: funtion pointer
expanding upon amraldo's reply.
function pointer is used when we don't (need to) know the name of the function in advance.
Just like an int pointer, where it can point to any int, a function pointer can point to any function with the same signature (i.e. return type and parameters).
We can use typedef to declare a function pointer type and use that for passing functions as parameters to functions (for ISR, Callbacks, task entry point, signal handler) in a easily readable way.
Function pointers allow a lot of flexibility in code development and creating libraries without knowing the exact end product.
And Google is not bad in telling about that!