Ein Array aus einer Funktion zurückgeben!



  • tipp schrieb:

    std::vector oder std::list

    das sowieso, dass er vector nehmen soll, aber er ist ja am anfang beim lernen, da soll er ruhig die nachteile von arrays erstmal kennenlernen 😉



  • Danke für die schnelle antwort...

    mit Container kenn ich mich noch nicht aus. Aber jetzt hab ich das mit den Zeiger verstanden. Ist aber kompliziert. Bei java gibt es ja keine Zeiger 🙂
    Naja gibt hier und da wieder vorteile. Ich selber mag lieber mehr C++.
    Kann mir jemand mal das mit dem"Static" erleutern?

    Und wie binde ich das mit dem code tag hier ein? [code]? [cpp]?



  • JuanPabloIssa schrieb:

    Danke für die schnelle antwort...

    mit Container kenn ich mich noch nicht aus. Aber jetzt hab ich das mit den Zeiger verstanden. Ist aber kompliziert. Bei java gibt es ja keine Zeiger 🙂

    Du bist hier auch nicht bei Java - bei C(++) verwendet man Pointer 😉

    Kann mir jemand mal das mit dem"Static" erleutern?

    Klar, "static" bedeutet, daß die Variable nach Ende der Funktion erhlaten bleibt (damit kannst du den zurückgegebenen Pointer noch weiterverwenden) - allerdings überschreibt die Funktion beim nächsten Aufruf das Array wieder, also solltest du die Werte vorher woanders sichern (in meinem Beispiel passiert das in der for()-Schleife).

    Und wie binde ich das mit dem code tag hier ein? [code]? [ cpp]?

    Ich nehme normalerweise cpp-Tags, da werden die Quelltexte auch farbig dargestellt.

    PS: zwei Varianten gibt es noch:

    //Variante 3: Pointer auf Heap
    int* getZahlen()
    {
      int* Zahlen=new int[6];
      //fülle das Array mit Zufallszahlen
      return Zahlen;
    }
    
    //Aufruf
    int* meineZahlen=getZahlen();
    //Arbeiten mit meineZahlen
    delete[]meineZahlen;
    
    //Variante 4: Übergabe als Parameter
    void getZahlen(int Zahlen[6])
    {
      //fülle das übergebene Array
    }
    
    //Aufruf
    int meineZahlen[6];
    getZahlen(meineZahlen);
    


  • Kannst du bitte für vector mal zeigen wie man dann auf die einzelnen Elemente zugreift? Also dessen "Index"?



  • Genauso wie bei einem Array (vector<> hat dafür extra den []-Operator überladen):

    //Fortsetzung von Aufruf Variante 2:
    vector<int> meineZahlen=getZahlen();
    for(int i=0;i<6;++i)
      cout<<i+1<<". Zahl ist "<<meineZahlen[i]<<".\n"
    


  • was passiert beim vector wenn man ausserhalb des indexes zugreift?
    normales array macht ja oft unverersehbare sachen, von garnichts bis hin sogar eines system reboots



  • Das ist genauso unvorhergesehen 😉 (aber du hast beim Vektor noch die Metohde at() - die macht in dem Fall etwas kontrolliertes und wirft eine out_of_range Exception)



  • das selbe...



  • hallo...nochmal muss ich euch nerven. Aber ich krieg das nicht hin. Ich möchte die Länge des Arrays ermitteln.

    In java gab es die Methode objekt.lengh in C++ sizeof oder bei char einfach auf /0 abfragen. Aber wie mach ich das auf array von INT s?

    danke



  • Gar nicht - das mußt du dir beim Anlegen des Arrays gesondert merken (oder du bleibst beim vector, der kennt seine Größe und kann sie mit size() auch verraten).


Anmelden zum Antworten