title: Function pointers : *(void**) (&fun) = dlsym (lib, "fun") how its work?
body: <p>I am using dlsym to populate of function pointer which is a member variable of call. 
  like below  </p>
  
  <pre><code>class ABC {
  private: 
      void (*m_fun) (int);
  }
  </code></pre>
  
  <p>now if I assign</p>
  
  <pre><code>m_fun = (void*) dlsym (libHandle, "fun") 
  </code></pre>
  
  <p>It gives error </p>
  
  <p>Over internet I found</p>
  
  <pre><code>*(void**) (&amp;m_fun) = dlsym(libHandle, "fun") is working. 
  </code></pre>
  
  <p>Can someone tell me how this conversion/casting happening here?</p>