在C中,将数组中的元素作为函数中的指针传入

在C中,将数组中的元素作为函数中的指针传入,c,arrays,multithreading,pointers,pthreads,C,Arrays,Multithreading,Pointers,Pthreads,我试图通过pthread_create将参数作为指针传入 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); typedef结构{ int输入; int-threadNum; }ARGS; ARGS argument16[16]; 对于(x=0;x

我试图通过pthread_create将参数作为指针传入

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
typedef结构{
int输入;
int-threadNum;
}ARGS;
ARGS argument16[16];
对于(x=0;x<16;x++){
printf(“pthread16_创建:%d\n”,x);
argument16[x].threadNum=16;
argument16[x]。输入=x%4;
pthread_create(&(threads16[x]),NULL,funct,argument16[x]);
}
这是给我的 错误:“pthread_create”的参数4的类型不兼容

如何在ARG数组中传入ARG类型指针?我似乎不明白。我知道数组已经是指针了,但不知道如何指向数组中的某个元素。
谢谢

pthread_create()的最后一个参数是指向void的指针,因此需要将地址类型转换为
void*
。所以,正如评论员所说,argument16[x]的地址,而不是您传递的值。也称为右值

在thread函数中,您需要一个正确类型的指针,以便:

typedef struct {
    int input;
    int threadNum;
} ARGS;

ARGS argument16[16];
for (x = 0; x < 16; x++) {
    printf("pthread16_created: %d\n", x);
    argument16[x].threadNum = 16;
    argument16[x].input = x % 4;
    pthread_create(&(threads16[x]), NULL, funct, argument16[x]);
}
是输入cast back的预期方式


如果您不确定将来是否使用指向相同类型的指针,并在每个循环中递增它,然后按左值传递

&argument16[x]
换句话说,您要传递的是元素的地址,而不是元素本身。噢,谢谢!我不知道为什么我没有想到这一点
ARGS * ptr  = (   ARGS *  ) arg;