int f(int);
int (*pf)(int)=&f;
int ans;
ans=f(25);
ans=(*pf)(25);
ans=pf(25);
The book called Pointers on C says that f(25) is equal to pf(25) because when we call a function, the function name f is converted to a function pointer which points to the function's location in memory, and then executes the function code by calling the function with the function call operator. This contradicts what I originally thought.
When I declare int a and use a as an r-value, a itself identifies a memory location and we can get the value stored in the memory via a. So when I declare a function, why doesn't the function identify the memory location of the function but is instead converted to a pointer? And if I don't declare a pointer which points to the function, where is the pointer converted by function name stored?
The value of a is different from &a. When we want to get the value of a through &a we should use *. So why is f(25) is equal to pf(25)?