2017-06-20 4 views
2

Ich habe eine Funktion erhalten, deren Rückgabewert void * ist. Ich muss zwei Werte von dieser Funktion zurückgeben.Rückgabewert void * in einer Funktion

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..! 
} 

Wie kann ich beide Werte mit void pointer zurückgeben?

+4

vielleicht Sie wollen '(* lessCount) ++;' – BLUEPIXY

+1

nicht sicher, warum Sie einer von ihnen, da Sie zurückkommen würde gehen beide durch Bezugnahme. –

+2

Diese Funktion macht es bereits. Die Zeiger, die Sie übergeben, zeigen auf die Werte, die Sie benötigen (gut, mit @BLUEPIXY-Korrektur). –

Antwort

2

Sie müssen nicht returnmoreCount und lessCount, Sie müssen nur ihre Werte innerhalb der Funktion zu aktualisieren.

Wie pro Rückgabetyp void * betrifft, so würde ich annehmen, dass es bedeutet, wenn das übergebene Array eine „gültige“ Array ist, wenn es Sie ist, kann eine nicht Nullwert zurück wählen (hängt davon ab, wie sich die studentsCount Funktion aufgerufen wird) .

sollte der Anrufer auch

studentsCount(<var Arr>,<var len>,<var score>,&<var lessCount>,&<var moreCount>); 

Darüber hinaus stellen Sie sicher, moreCount und lessCount auf einen gültigen Speicherstelle, initialisiert richtige Werte

0

Nein, Sie müssen mindestens einen Parameter übergeben.

+1

Beide werden von Zeiger trotzdem übergeben. Es ist möglich, mehrere Werte über einen Strukturtyp zurückzugeben - was besser wäre als ein 'void *' Rückgabetyp. Vorausgesetzt, dass der Code NULL zurückgibt, wenn das Array oder die Länge ungültig sind, scheint es wahrscheinlich, dass die Funktion das Array (Zeiger auf den Anfang der Daten) zurückgibt, wenn es erfolgreich ist, obwohl es eine etwas seltsame Schnittstelle ist. –

0

Sie die Variablen als Verweis übergeben muss beim Aufruf der Funktion , Sie können die Inkrementierungs- oder Dekrementoperatoren in einer Variablen, die als Referenz verwendet wird, nicht verwenden, da sie ein Zeiger sind. Befestigt ein Beispiel Funktionscode, mit Referenzaufruf für Variablen, ich hoffe, diese Hilfe Sie

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