我有两个文件:mainfile.c
和kmeans.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
。我尝试了许多方法,包括指针数组,但这是错误的。任何帮助都是适用的。
答案 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);
}