Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从Int数组地址创建Int数组_C_Arrays_Multithreading_Pointers_Pthreads - Fatal编程技术网

C 从Int数组地址创建Int数组

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的,有什么需要帮忙的吗?这里的解决方案仍然给了我一

我目前正在用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初始值设定项errorTry
void*merge(void*arg){int*arg\u ptr=(int*)arg;}
。要得到结果,你需要打电话。