title: void pointer in function parameter
body: <p>Consider following program:</p>
  
  <pre><code>#include &lt;iostream&gt;
  void f(void* a)
  {
      std::cout&lt;&lt;"(void*)fun is called\n";
      std::cout&lt;&lt;*(int*)a&lt;&lt;'\n';
  }
  int main()
  {
      int a=9;
      void* b=(int*)&amp;a;
      f(b);
      return 0;
  }
  </code></pre>
  
  <p>If I change the function call statement like this:</p>
  
  <p><strong><code>f(&amp;b);</code></strong>   </p>
  
  <p>It still compiles fine &amp; crashes at runtime. Why? What is the reason? Should I not get the compile time error? Because the correct way to call the function is f(b). right? Also, why it is allowed to pass NULL to a function whose parameter is of type (void*)? </p>
  
  <p>Please correct me If I am missing something or understanding something incorrectly. </p>