Возвращаемое значение void * в функции

Мне дали функцию, возвращаемое значение которой 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..!
}

Как я могу вернуть оба значения, используя пустой указатель?

3 ответа

Решение

Вам не нужно returnmoreCount а также lessCountВы просто должны обновить их значения внутри функции.

Согласно типу возврата void * обеспокоен, я бы предположил, что это означает, что переданный массив является "допустимым" массивом, если это так, вы можете выбрать возвращаемое ненулевое значение (зависит от того, как studentsCount функция вызывается).

Звонящий также должен убедиться, moreCount а также lessCount указывает на правильную ячейку памяти, инициализированную для правильных значений

Нет, вам нужно передать хотя бы один из них по параметру.

Вы должны передать переменные по ссылке при вызове функции

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);
}
Другие вопросы по тегам