title: Confused about Qsort and Pointers
body: <p>I am a beginner programmer in C who wants to get used to terminology and pointers. 
  I have found the following working function prototype while searching for a way to sort the elements of a numerical array. The function was qsort and it utilized pointers. Now what I understood is that the word "const" ensures that the values a and b are unchanged but not the pointers. Correct me if I am wrong here. My questions are:</p>
  
  <ol>
  <li>Why do we use <code>void *</code> the function can we not use <code>int *</code> from the
  start? </li>
  <li>How does the construction <code>*(int*)a</code> in the return part
  work?</li>
  <li><p>Why does the qsort algorithm needs this many arguments?</p>
  
  <pre><code>int compare (const void *a, const void *b)
  {
       return ( *(int*)a - *(int*)b ); 
  }
  </code></pre></li>
  </ol>
  
  <p>Many thanks for the answers. 
  PS: That is a pretty complicated task for me. </p>