2017-06-20 114 views
2

我被給了一個返回值爲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..! 
} 

如何使用void指針返回兩個值?

+4

你也許想'(* lessCount)++;' – BLUEPIXY

+1

不知道爲什麼你會在回報他們的,因爲你'通過參考傳遞。 –

+2

這個功能已經在做。您通過的指針將指向您需要的值(以及@BLUEPIXY更正)。 –

回答

2

你不需要returnmoreCountlessCount,你只需要在函數內更新它們的值。

按返回類型void *而言,我會假設它表示,如果傳遞的數組是「有效的」數組,如果它是你可以選擇返回一個非空值(視studentsCount功能是如何被調用) 。

呼叫者也應該確保moreCountlessCount指向一個有效的存儲位置,初始化爲適當

0

不,您需要通過參數中的至少一個。

+1

無論如何都是通過指針傳遞的。有可能通過結構類型返回多個值 - 這比「void *」返回類型更好。假設當數組或長度無效時代碼返回NULL,看起來可能該函數在成功時返回數組(指向數據開始的指針),儘管它是一個有點奇怪的接口。 –

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