title: clarification on void *
body: <p>since we can only cast a pointer to another pointer, how exactly "(void *) t and (int)threadid" are working in the below code?
  shouldnt we use &amp;t instead of t?</p>
  
  <pre><code>void *PrintHello(void *threadid)
  {
     long tid;
     tid = (long)threadid;
     printf("Hello World! It's me, thread #%ld!\n", tid);
     pthread_exit(NULL);
  }
  
  int main(int argc, char *argv[])
  {
     pthread_t threads[NUM_THREADS];
     int rc;
     long t;
     for(t=0;t&lt;NUM_THREADS;t++){
       printf("In main: creating thread %ld\n", t);
       rc = pthread_create(&amp;threads[t], NULL, PrintHello, (void *)t);
       if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
         exit(-1);
         }
       }
  
     /* Last thing that main() should do */
     pthread_exit(NULL);
  }
  </code></pre>