(这是短代码)
pthread_create上的char **,效果很好。
int main()
{
char *data[RO] = { /*texts*/ };
pthread_t thread_t;
int status;
if (pthread_create(&thread_t, NULL, pthreadM, (void *)data) < 0)
{
perror("thread create error:");
exit(0);
}
pthread_join(thread_t, (void **)&status);
printf("Thread End %d\n", status);
return 1;
}
void *pthreadM (void* data)
{
char **_data = (char **)data;
print_number(_data[i]);
}
但是在id刚刚添加*之后,char ***会出错。为什么会这样?
char *data[][]= ~
if (pthread_create(&thread_t, NULL, pthreadM, (void *)data) < 0)
{
perror("thread create error:");
exit(0);
}
void *pthreadM (void* data)
{
char ***_data = (char ***)data;
print_number(_data[1][i]);
}
这是print_number()
void print_number(const char *data)
{
printf("%s", data);
}
答案 0 :(得分:1)
假设data
类似于
char *data[X][Y] = { { "abc", "def", ... }, ... };
data
正如(void *) data
一样传递给pthread_create
。
在线程主体中,对于这样一个复杂的对象,制作指向原始类型的指针可能更容易,更安全,比如
void *mythread(void *p) {
char *(*pd)[][Y] = p;
并像这样使用
(*pd)[0][1] = "hello";