title: Avoid incompatible pointer warning when dealing with double-indirection
body: <p>Assuming this program:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  
  static void ring_pool_alloc(void **p, size_t n) {
      static unsigned char pool[256], i = 0;
      *p = &amp;pool[i];
      i += n;
  }
  
  int main(void) {
      char *str;
      ring_pool_alloc(&amp;str, 7);
      strcpy(str, "foobar");
      printf("%s\n", str);
      return 0;   
  }
  </code></pre>
  
  <p>... is it possible to somehow avoid the GCC warning</p>
  
  <pre><code>test.c:12: warning: passing argument 1 of ‘ring_pool_alloc’ from incompatible pointer type
  test.c:4: note: expected ‘void **’ but argument is of type ‘char **’
  </code></pre>
  
  <p>... without casting to (void**) (or simply disabling the compatibility checks)? Because I would very much like to keep compatibility warnings regarding indirection-level...</p>