Problem mit einer Funktion



  • Hallo,

    ich will eine Fkt schreiben mit folgendem Funktionskopf:

    void sort(struct dlist *head, int (*comp)(void*, void*));

    Ich hab die Funktion fast geschrieben, aber weiss nicht 2 Sachen:

    1. Wie kann ich spater mit parameter die Funktion aufrufen.
    2. Wie kann ich diese Funktion int comp() in der funkction sort() einwenden

    Die Funktion sort():

    void sort(struct dlist *head, int (*comp)(void*, void*)) {
    
    int i, ok;
    
    struct dlist *tmp;
    tmp = head;
    
    do {
    ok = 1;
    for(i=0;i<count;i++) {
    if(...) { // Hier muss die Funktion comp(tmp->data,tmp->next->data) > 0 stehen
    swap(tmp->data,tmp->next->data);
    ok=0;
    } 
    tmp=tmp->next;
    }
    }
    
    } while(!ok);
    
    }
    

    Aufruf von sort() in der main-Methode:

    ich hab es mit sort(anfang, comp(anfang->data, anfang->next->data));
    probiert, aber kommt ein Warrning, dass der 2. Argument von "sort" macht pointer von integer ohne cast.

    Hilfe ....



    1. Du mußt dort einen Funktionszeiger übergeben:
    int compare(void* l,void* r)
    {
      //vergleiche *l und *r
    }
    
    ...
    sort(anfang,compare);
    
    1. In der Funktion sort() kannst du den übergebenen Parameter so nutzen, als ob er eine Funktion wäre:
    void sort(dlist* head,int(*comp)(void*,void*))
    {
      ...
      //Vergleich zweier Elemente:
      if(comp(pos1->data,pos2->data))...
      ...
    }
    

Log in to reply