获得通过‘的参数3的警告;pthread_create’;来自不兼容的指针类型[-Wincompatible指针类型]

获得通过‘的参数3的警告;pthread_create’;来自不兼容的指针类型[-Wincompatible指针类型],c,multithreading,pthreads,C,Multithreading,Pthreads,我正在运行下面的代码,它工作得很好,但它仍然给出了一些我不理解的警告。有人能给我解释一下吗?谢谢 #include <stdio.h> #include <pthread.h> void* the_thread_func(double data_for_thread[]) { /* Do something here? */ for(int i=0;i<3;i++){ double sum = sum + data_for_threa

我正在运行下面的代码,它工作得很好,但它仍然给出了一些我不理解的警告。有人能给我解释一下吗?谢谢

#include <stdio.h>
#include <pthread.h>

void* the_thread_func(double data_for_thread[]) {
  /* Do something here? */

        for(int i=0;i<3;i++){
    double sum = sum + data_for_thread[i];
    printf("The sum done by the_thread_func()  is = %f\n",sum);
   }

  return NULL;
}

int main() {
  printf("This is the main() function starting.\n");

  double data_for_thread[3];
  data_for_thread[0] = 5.7;
  data_for_thread[1] = 9.2;
  data_for_thread[2] = 1.6;

  /* Start thread. */
  pthread_t thread;
  printf("the main() function now calling pthread_create().\n");
  pthread_create(&thread, NULL, the_thread_func, data_for_thread);

  printf("This is the main() function after pthread_create()\n");

  /* Do something here? */

   for(int i=0;i<3;i++){
   double sum = sum + data_for_thread[i];
    printf("The sum done by main() is = %f\n",sum);
   }

  /* Wait for thread to finish. */
  printf("the main() function now calling pthread_join().\n");
  pthread_join(thread, NULL);

  return 0;
}
#包括
#包括
void*线程函数(线程[]的双数据){
/*在这里做点什么*/
对于(int i=0;i,根据手册,需要提供具有此签名的函数:

void* (*start_routine)(void*)
但您正在传递一个函数,该函数在此处接受
double*

void* the_thread_func(double data_for_thread[]) // decays to double*
我认为您需要更改签名,并在函数内部强制转换
void*
,如下所示:

// accept void*
void* the_thread_func(void* vp) {
  /* Do something here? */

    double* data_for_thread = reinterpret_cast<double*>(vp); // cast here

    for(int i=0;i<3;i++){
        double sum = sum + data_for_thread[i];
        printf("The sum done by the_thread_func()  is = %f\n",sum);
    }

    return nullptr;
}
//接受无效*
void*线程函数(void*vp){
/*在这里做点什么*/
double*data\u for\u thread=reinterpret\u cast(vp);//在此处进行转换

(int i=0;i <代码> th.thRead函数()/Case>应接受<代码> Value*/Cux>不是<代码>双* C或C++,它们不同,languages.this是C语言。