Question: I just wanted to know the various reasons that might affect the size of a function pointer from memory perspective.

I'd like to emphasize that my question isn't about how functions pointers could be used and how they could be type-cast. It's just about if I declare a function pointer like

```
 int (*fptr)(int, int);

```

and create a variable of it

```
fptr fun1;

```

what is the size I'm expected to get if I run it on a 32/64 bit machine?

Is it possible to determine the size of a function pointer simply by looking at its declaration, like I could tell a void pointer would size 4 bytes on a 32-bit machine.

Answer: 
In any one program, all function pointers in C have the same size. A function pointer need not have the same size as `void *` according to the C standard. For that reason, you can't portably assign a function pointer to `void *`. However, Posix in effect does require that the two have the same size, else `dlopen(2)` wouldn't work. 

> 
> what is the size I'm expected to get
> 
> 
> 

That depends on what you expect? Pointer size -- data or function -- is up to the compiler (and its options). If you're programming on a popular, general-purpose platform, likely pointer size will be `sizeof(size_t)`. But if you're doing something specialized, the only safe answer is RTFM.
A pointer has only one size. It does not matter what it points to. It is large enough to hold the address of a location in the process's virtual memory that can be accessed. This is typically 64 bits (8 bytes) on current CPUs and 32 bits on older ones.