<p>Using qsort in C we pass in a comparison function e.g.</p>

<pre><code>int cmp(const void*, const void*);
</code></pre>

<p>the protoype of qsort expects a <code>int (* )(const void* , const void*)</code> so we call:</p>

<pre><code>qsort(..., cmp);
</code></pre>

<p>but it is equally valid to call:</p>

<pre><code>qsort(..., &amp;cmp);
</code></pre>

<p>and this is what we would have to do if we passed in a static member-function in C++. Kernighan &amp; Ritchie (2nd Edition, 5.11 "Pointers To Functions" p119) states that "since [cmp] is known to be a function, the &amp; operator is not necessary, in the same way that it is not needed before an array name."</p>

<p>Does anyone else feel slightly uncomfortable with this (esp. regarding type-safety)?</p>

Whether you feel uncomfortable or not doesn't change the fact that C is not considered a type-safe language.  Case in point:
```
```
int main()
{
   int integer = 0xFFFFFF; 
   void (*functionPointer)() = (void(*)())integer; 

   functionPointer(); 

   return 0; 
}
```
```
This is completely valid at compile time, but it is obviously not safe.