title: For function pointer "fptr",why is value of "fptr" and *fptr same?What *fptr even mean?I only knew (*fptr)() or fptr()
body: <p>Why is a <code>function pointer</code> behaving like an <code>array pointer</code> as far as this behavior goes?I mean, let's begin with the case of an array <code>list[]</code> where we'll consider <code>&amp;list</code> and <code>list</code>.</p>
  
  <pre><code> char name[5]= "Eric",(*aptr)[5]=&amp;name;
   printf("%p,%p",*aptr,name); //BOTH ARE NUMERICALLY SAME
  </code></pre>
  
  <p>and we can refer to array elements also as <code>(*aptr)[1]</code>,<code>(*aptr)[2]</code>, etc.I understand what's going on here.</p>
  
  <p>But why is the same working for functions?After all a "function" as such is not a contiguous memory block of similar elements as an array is.Consider this.</p>
  
  <p>Suppose <code>fptr</code> is a function pointer as in my program.Why does <code>fptr</code> and <code>*fptr</code> give the same value when printed?What does <code>*fptr</code> even mean?I only knew that we can invoke a function using its pointer as <code>(*fptr)()</code> or as <code>fptr()</code>,but what is <code>*fptr</code> alone then?</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  
  void foo(){};
  
  int main(void)
  {
  void (*fptr)()=foo;
  printf("%p,%p",fptr,*fptr);
  
  }
  </code></pre>
  
  <p><strong>Result-</strong>  <code>00401318  00401318</code></p>