array aus funktion zurückgeben die rekursiv ist?



  • Hallo!
    Ich habe folgendes Problem:
    ich habe eine rekursive Funktion die ein Array füllt. Zurzeit ist das Array global definiert und wird einfach in der funktion und in der main benutzt.

    Ich möchte dies jetzt abschaffen. der return von Arrays aus Funktionen mittels structs geht hier nicht, weil ich mehrere returns habe, durch den rekursiven aufbau. die beiden returns unterscheiden sich im type (1x das Array vom type struct und 1x der Rekursive Aufruf)

    Geht das vllt mit Pointer? Möchte einfach das die Funktion selbt ein Array erzeugt (das vorfahren array) diesen rekursiv füllen kann und mir das dann zurückgibt. (Problem wie zurückgeben???)

    Ich hoffe das war halbwegs zu verstehen. danke

    hier der Code:

    bool search(struct personAndParents arr[], char *nname, int gebdate)
    {
       int i=0;
       bool result = false;
    
      for(i=0; i < 111;  i++)
      {
          if(arr[i].sohn.gebdate == gebdate  && strcasecmp(arr[i].sohn.nname,nname)== 0)
          {
    
    	vorfahren[j] = arr[i].sohn;
    	j++;
    
    	if((strcasecmp(arr[i].vater.nname,"-")==0)  && (strcasecmp(arr[i].mutter.nname,"-")) == 0)
    	{
    	  return true;
    	}
    	else
    	{
    	  return search(arr,arr[i].vater.nname,arr[i].vater.gebdate) && search(arr,arr[i].mutter.nname,arr[i].mutter.gebdate);
    	}      
          }
      }
      return false;
    }
    

    Also das vorfahren[] array ist das noch "globale" Array das ich gern zurückgeben möchte und aber nicht weiss wie.

    mfg
    1metal3



  • änder' doch den rückgabewert in 'struct personAndParents*' und dann gibst du beim aufruf von aussen einen pointer auf dein 'lokales' array rein...



  • also ich hab jetzt folgendes probiert:

    Hab draußen in der main ein

    struct person ppp[111];
    struct person *pp;
    pp = ppp;  //zeiger aufs array
    
    pp = search(parray,nname1,gebdate1,pp);
    pp=ppp; //auf start von array setzen
    

    Funktion:

    struct person * search(struct personAndParents arr[], char *nname, int gebdate,struct person *pp)
    {
    
       int i=0;
       bool result = false;
    
      for(i=0; i < 111;  i++)
      {
          if(arr[i].sohn.gebdate == gebdate  && strcasecmp(arr[i].sohn.nname,nname)== 0)
          {
    
    	*pp = arr[i].sohn;
    	pp++;
    	//vorfahren[j] = arr[i].sohn;
    	j++;
    
    	if((strcasecmp(arr[i].vater.nname,"-")==0)  && (strcasecmp(arr[i].mutter.nname,"-")) == 0)
    	{
    	  return pp;
    	}
    	else
    	{
    	  return search(arr,arr[i].vater.nname,arr[i].vater.gebdate,pp) && search(arr,arr[i].mutter.nname,arr[i].mutter.gebdate,pp);
    	}      
          }
      }
    }
    

    Es kommt folgender Fehler: return makes pointer from integer without a cast

    kann mir da jemand helfen, so funtioniert das noch nicht, wenn ich ganz falsch liege bitte genauer beschreiben was ich machen muss.

    danke



  • "return search(..) && search(..);" dürfte das Problem bereiten - && liefert einen bool-Wert zurück, den du dann als Zeiger interpretieren willst. Du mußt dich vermutlich entscheiden, welchen Zweig du weiterverfolgst.



  • Hm naja diesen rekursiven Return mit && brauch ich schon, das muss doch möglich sein trotzdem ein Array zurückzubekommen ohne es global definieren zu müssen.

    rekursives füllen und rückgeben, weiß noch jemand Rat?

    vielen dank


Anmelden zum Antworten