C 从Int数组地址创建Int数组
我目前正在用C处理线程,目前我一直坚持在线程创建中使用我的一个参数(要排序的数组)作为要处理的数组。例如:C 从Int数组地址创建Int数组,c,arrays,multithreading,pointers,pthreads,C,Arrays,Multithreading,Pointers,Pthreads,我目前正在用C处理线程,目前我一直坚持在线程创建中使用我的一个参数(要排序的数组)作为要处理的数组。例如: void*排序(void*参数) 如何获取param,以便将其用作int数组局部变量 同样,要返回排序后的数组,我只需在最后一行执行return array 并执行类似于int-sorted\u-array[]=pthread\u-create(&tid,&attr,sort,&un-sorted\u-array)的操作来捕获它 我是新来C的,有什么需要帮忙的吗?这里的解决方案仍然给了我一
void*排序(void*参数)
如何获取param,以便将其用作int数组局部变量
同样,要返回排序后的数组,我只需在最后一行执行return array
并执行类似于int-sorted\u-array[]=pthread\u-create(&tid,&attr,sort,&un-sorted\u-array)
的操作来捕获它
我是新来C的,有什么需要帮忙的吗?这里的解决方案仍然给了我一个无效的初始化错误 要访问数组,可以像这样将
void
指针投射到int
指针
void* merge(void* arg) {
int* a = (int*) arg;
}
pthread_create(&tid, NULL, merge, (void*)&a[0]);
要返回数组,只需执行以下操作
return a;
其中a
是int*
。为了从主线程获得结果,您使用指向某些int*
的第二个参数调用
pthread_join(tid, (void*)&b);
其中b
是int*b代码>
要将参数传递给线程,需要获取数组第一个元素的地址(它与此数组的指针相同)。像这样做
void* merge(void* arg) {
int* a = (int*) arg;
}
pthread_create(&tid, NULL, merge, (void*)&a[0]);
其中a
是数组inta[N]代码>
请参阅pthread
的完整示例,其中int
数组作为参数,int*
作为返回值
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define N 10
void* merge(void* arg) {
int* arr = (int*) arg;
int* res = malloc(N * sizeof(int));
for(int i = 0; i < N; ++i) {
res[i] = arr[i] + 1;
}
return res;
}
int main() {
pthread_t tid;
int a[N];
int* b;
for(int i = 0; i < N; ++i) {
a[i] = i;
}
printf("a = [");
for(int i = 0; i < N; ++i) {
printf("%3d ", a[i]);
}
printf("]\n");
pthread_create(&tid, NULL, merge, (void*)&a[0]);
pthread_join(tid, (void*)&b);
printf("b = [");
for(int i = 0; i < N; ++i) {
printf("%3d ", b[i]);
}
printf("]\n");
return 0;
}
#包括
#包括
#包括
#定义n10
作废*合并(作废*参数){
int*arr=(int*)arg;
int*res=malloc(N*sizeof(int));
对于(int i=0;i
我试图理解那个链接,但我仍然卡住了。对于初学者,你应该发布你的全部代码。void*merge(void*arg){int*arg\u ptr[]=(int*)arg;int arr[]=*arg\u ptr;}
给我一个invaild初始值设定项errorTryvoid*merge(void*arg){int*arg\u ptr=(int*)arg;}
。要得到结果,你需要打电话。