将整个结构数组传递给C中的Pthread_Create

将整个结构数组传递给C中的Pthread_Create,c,arrays,struct,pthreads,C,Arrays,Struct,Pthreads,我在这个问题上有点麻烦。我有一个包含2个结构的数组。我需要将该数组传递到一个线程函数中,并能够访问和操作该数组中的两个结构。我看过并发现的所有示例通常都会将数组的每个元素传递给pthread_create,但在我的程序上下文中,一次只能调用pthread_create的一个实例,因此我无法逐个传递数组中的每个元素。下面是我正在查看的简化代码(如果您需要更多相关信息,请告诉我): 我也试着说 foo *temp = (foo *)arr; 显而易见的解决方案是将temp[]中的每个元素分配给ar

我在这个问题上有点麻烦。我有一个包含2个结构的数组。我需要将该数组传递到一个线程函数中,并能够访问和操作该数组中的两个结构。我看过并发现的所有示例通常都会将数组的每个元素传递给pthread_create,但在我的程序上下文中,一次只能调用pthread_create的一个实例,因此我无法逐个传递数组中的每个元素。下面是我正在查看的简化代码(如果您需要更多相关信息,请告诉我):

我也试着说

foo *temp = (foo *)arr;
显而易见的解决方案是将temp[]中的每个元素分配给arr[]中的一个元素,但这不起作用

结果是我只能访问temp数组中的第一个元素,即使我尝试访问temp[1],这是有意义的,因为我似乎没有将arr[]中的第二个元素分配给任何对象


我确信我遗漏了一些明显的东西,但我似乎找不到它,而且我也找不到关于这个具体情况的任何相关信息。感谢您的帮助。

这涉及到将void指针强制转换为结构的指针类型,然后取消引用该指针表达式以获取特定偏移量处的元素:

*((foo *) arr); /* first element */
*((foo *) arr + 1); /* second element */

编辑:另一个重要问题-必须在
main
之外全局定义
arr
数组。由于新创建的线程将有自己的堆栈空间,因此访问另一个线程的堆栈不是很安全。

它涉及将空指针强制转换为结构的指针类型,然后取消引用该指针表达式以获取特定偏移处的元素:

*((foo *) arr); /* first element */
*((foo *) arr + 1); /* second element */

编辑:另一个重要问题-必须在
main
之外全局定义
arr
数组。因为新创建的线程将有自己的堆栈空间,所以访问另一个线程的堆栈不是很安全。

我似乎无法让第一条语句工作,因为我必须取消对void*的广播。我有foo**temp=(foo*)arr。它给了我无效的初始值设定项警告,然后赋值语句给了我void*的错误,没有被忽略,因为它应该被忽略。void指针不必强制转换-它们是泛型的,可以在更仔细地检查代码后直接分配给任何其他指针类型,我发现我的答案不太正确,请检查我的编辑。好的,现在已经编译好了,谢谢!我会看看它是否真的符合我的要求,但希望这个问题背后的问题得到解决。非常感谢。我似乎无法让第一条语句生效,因为我必须取消播放void*。我有foo**temp=(foo*)arr。它给了我无效的初始值设定项警告,然后赋值语句给了我void*的错误,没有被忽略,因为它应该被忽略。void指针不必强制转换-它们是泛型的,可以在更仔细地检查代码后直接分配给任何其他指针类型,我发现我的答案不太正确,请检查我的编辑。好的,现在已经编译好了,谢谢!我会看看它是否真的符合我的要求,但希望这个问题背后的问题得到解决。谢谢。