在函数中返回值void *

时间:2017-06-20 16:15:06

标签: c return-value void-pointers

我得到了一个返回值为void *的函数。我需要从该函数返回两个值。

void * studentsCount(int *Arr, int len, int score, int *lessCount, int *moreCount) {
    if (Arr == NULL || len <= 0)
        return NULL;
    for (int i = 0; i < len; i++){
        if (Arr[i] < score)
            *lessCount++;
        else if (Arr[i] > score)
            *moreCount++;
    }
    return lessCount;  // <-- I need to return lesscount and morecount..!
}

如何使用void指针返回两个值?

3 个答案:

答案 0 :(得分:2)

您不必return moreCountlessCount,只需在函数内更新其值即可。

根据返回类型void *,我认为它表示传递的数组是否是“有效”数组,如果是,您可以选择返回非空值(取决于{{{ 1}}函数被调用)。

来电者还应确保studentsCountmoreCount指向有效的内存位置,初始化为正确的

答案 1 :(得分:0)

不,你需要通过参数传递至少一个。

答案 2 :(得分:0)

调用函数

时,必须通过引用传递变量
studentsCount(<var Arr>,<var len>,<var score>,&<var lessCount>,&<var moreCount>);

此外,您不能在引用使用的变量中使用递增或递减运算符,因为它们是指针。附上一个示例函数代码,通过引用调用变量,我希望,这可以帮助您

void ejemplo(int *valor1, int *valor2){
    int valor1_val=*valor1;
    int valor2_val=*valor2;
    printf("\nValues in Function\n");
    printf("Before Asignation\n");
    printf("Numero1 [%d]\nNumero2 [%d]\n",valor1_val,valor2_val);
    valor1_val++;
    valor2_val--;
    printf("After Asignation\n");
    printf("Numero1 [%d]\nNumero2 [%d]\n\n",valor1_val,valor2_val);
    *valor1=valor1_val;
    *valor2=valor2_val;
    printf("Return to Main Code\n\n");
}

int main(int argc, char **argv){
   int numero1=100;
   int numero2=100;
   printf("In Main, before function call\n");
    printf("Numero1 [%d]\nNumero2 [%d]\n",numero1,numero2);
    ejemplo(&numero1,&numero2);
    printf("After function call\n");
    printf("Numero1 [%d]\nNumero2 [%d]\n",numero1,numero2);
    exit(0);
}