将地址缓冲区从一个文件返回到另一个文

时间:2017-05-16 06:47:53

标签: c return return-value function-calls

我有两个文件:mainfile.ckmeans.c。我想将kmeans.c中分配的缓冲区的地址返回给mainfile.c。以下是流程:

kmeans.c

void kmeans(int *cluster_assign, int *cluster_size,){
    cluster_assign = malloc(1000 * sizeof(int));
    cluster_size = malloc(5 * sizeof(int));

    // Some operations on both buffers

    return cluster_assign, cluster_size     //  <<<< Here I want to return the address of both buffers to main
}

mainfile.c

int main(){

    int *cluster_size = NULL;
    int *cluster_assign = NULL;

    kmeans(cluster_centers, cluster_size);

    // Here, I don't know how to acquire the addresses that were allocated in kmeans(...)

    return 0;
}

如您所见,如果我不从kmeans.c返回地址,则无法继续mainfile.c。我尝试了许多方法,包括指针数组,但这是错误的。任何帮助都是适用的。

2 个答案:

答案 0 :(得分:0)

这样的陈述
   return cluster_assign, cluster_size;

相同
   return cluster_size;

因为,comma-operator生效了。将评估并丢弃逗号运算符的LHS,RHS操作数将是实际的有效返回值。

基本上,你不能让一个return语句用函数中的一个语句返回两个变量的值。

  • 但是,您可以始终使用成员作为两个元素形成一个结构(struct变量)并返回该结构。

  • 作为替代方案,您可以在函数内部指向要修改的变量,执行操作并愉快地返回void(无,return ;或者只是省略return statement。)

答案 1 :(得分:0)

你可以使用双指针

来做到这一点
void kmeans(int **cluster_assign, int **cluster_size,){
    *cluster_assign = malloc(1000 * sizeof(int));
    *cluster_size = malloc(5 * sizeof(int));

    // Some operations on both buffers
}


int main(){

    int *cluster_size = NULL;
    int *cluster_assign = NULL;

    kmeans(&cluster_centers, &cluster_size);

}