Возвращаемое значение 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 ответа
Вам не нужно return
moreCount
а также 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);
}