Return 函数中的值 void *

Return value void * in a function

我得到了一个 return 值为 void * 的函数。我需要 return 来自该函数的两个值。

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 指针 return 两个值?

不可以,你至少需要通过参数传递其中之一。

您不必 return moreCountlessCount,您只需在函数内更新它们的值。

根据 return 类型 void * 而言,我假设它表示传递的数组是否为 "valid" 数组,如果是,您可以选择 return 非空值(取决于 studentsCount 函数的调用方式)。

调用者还应确保 moreCountlessCount 指向有效的内存位置,并初始化为 正确的

调用函数时必须按引用传递变量

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);
}