title: passing pointer to function in pthread_create
body: <p>I am trying to create a thread by passing a function pointer, however at this line </p>
  
  <pre><code>pthread_t start_thread(void *func, thread_data *tdata)
  </code></pre>
  
  <p>It gives me --</p>
  
  <pre class="lang-none prettyprint-override"><code>use-hello.c:23: error: invalid conversion from 'void*' to 'void* (*)(void*)    
  </code></pre>
  
  <p>Any inputs please...</p>
  
  <pre><code>typedef struct thread_data{
  int fd;
  int threadId;
  }thread_data;
  
  
  pthread_t start_thread(void *func, thread_data *tdata)
  {
     pthread_t thread_id;
     int rc;
        printf("In main: creating thread\n");
        rc = pthread_create(&amp;thread_id, NULL, func, tdata);
        if (rc){
           printf("ERROR; return code from pthread_create() is %d\n", rc);
           exit(-1);
          }
      return(thread_id);
  }
  
  
  void thread_function1(thread_data *tdata){ 
  .
  .
  }
  
  int main(int argc, char **argv){
  
  /* Our file descriptor */
  int fd;
  int rc = 0;
  
  printf("%s: entered\n", argv[0]);
  
  /* Open the device */
  fd = open("/dev/hello1", O_RDWR);
  
  if ( fd == -1 ) {
      perror("open failed");
      rc = fd;
      exit(-1);
  }
  printf("%s: open: successful, fd=%d\n", argv[0], fd);
  
  //array of function pointers
  void (*function[5])(thread_data*);
  
  function[0] = thread_function0;
  function[1] = thread_function1;
  function[2] = thread_function2; 
  function[3] = thread_function3;
  function[4] = thread_function4;
  
  
  //start threads
  for(int i=0; i&lt;2; i++){
      thread_data *tdata[i] = (thread_data*)malloc(sizeof(thread_data));
      tdata[i]-&gt;threadId = i;
      tdata[i]-&gt;fd = fd;
      printf("starting thread = %d\n",start_thread(function[i]), tdata[i]));
  }
  
  while(1) sleep(1); // infinite loop
  
  printf("closing file descriptor..\n");
  close(fd);
  printf("file descriptor closed..\n");
  
  return 0;
  
  }
  </code></pre>