4.3.6 Pointer Types

There are two basic pointer types supported by the MPLAB XC8 C Compiler:

Data pointers
These hold the addresses of objects which can be read (and possibly written) by the program.
Function pointers
These hold the address of an executable function which can be called via the pointer.

These pointer types cannot be used interchangeably. Data pointers (even generic void * pointers) should never be used to hold the address of functions and function pointers should never be used to hold the address of objects.