title: How can this code be of type pointer to pointer to void?
body: <p>I am studying c language now.
  While studying, I saw the code, but there is one part I don't understand.</p>
  <pre><code>int main(int argc, char* argv[]){
      pthread_t  t_id;
      int arg = 10;
      int result;
      int *p;
  
      result = pthread_create(&amp;t_id, NULL, thread_main, (void *)&amp;arg);
      if(result != 0){
          errno = result;
          perror(&quot;create&quot;);
      }
      pthread_join(t_id, (void *)&amp;p);
      printf(&quot;%d\n&quot;, *p);
      return 0;
  }
  </code></pre>
  <pre><code>pthread_join(t_id, (void *)&amp;p);
  </code></pre>
  <p>If it is forced casting, I think it should be <code>(void*)type</code> but
  I am wondering how the variable p turns from <code>(void*)&amp;p</code> to a <code>void**p</code> type.</p>
  <p>Shouldn't it be written in <code>(void**)&amp;p</code></p>