title: Why is `typedef void * COMPLEX` used in this interface?
body: <p>I have a program and I can't understant how it works. Here is a part of it. 
  I don't understand the line <code>typedef void *COMPLEX</code>, the command <code>this</code> and why the <code>struct COMPLEX_IMPL</code> is being used.</p>
  
  <pre><code>#ifndef _COMPLEX_H 
  #define _COMPLEX_H 
  
  typedef void *COMPLEX; 
  
  COMPLEX NewCOMPLEX (double a, double b ); 
  
  void DeleteCOMPLEX(COMPLEX this ); 
  
  double GetA (COMPLEX this ); 
  
  double GetB (COMPLEX this ); 
  
  COMPLEX AddComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); 
  COMPLEX MultComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); 
  
  #endif /* _COMPLEX_H */
  
  #ifndef _COMPLEX_H 
  #define _COMPLEX_H 
  
  typedef void *COMPLEX; 
  
  COMPLEX NewCOMPLEX (double a, double b ); 
  
  void DeleteCOMPLEX(COMPLEX this ); 
  
  double GetA (COMPLEX this ); 
  
  double GetB (COMPLEX this ); 
  
  COMPLEX AddComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); 
  COMPLEX MultComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); 
  
  #endif /* _COMPLEX_H */
  </code></pre>
  
  <hr>
  
  <pre><code>#include &lt;stdio.h&gt; 
  #include "complex.h" 
  
  struct COMPLEX_IMPL { double a; double b; }; 
  
  double GetA(COMPLEX this) { 
      struct COMPLEX_IMPL *this_impl = (struct COMPLEX_IMPL*)this; 
      return this_impl-&gt;a; 
  }
  </code></pre>