Kleines Problem mit Variablen



  • Okay, ist ja garnicht schwer!!

    Aber warum geht das mit Arrays nicht? Weil es nicht nur eine Zahl ist?

    int Rechnen()
    {
        int Array[3];
        for (size_t i=0;i<3;i++)
        {
            cin >> Array[i];
        }
        return Array[3];
    }
    int Rechnenmiti(int Array[3])
    {
        for (size_t i=0;i<3;i++)
        {
            cout << Array[i];
        }
    }
    
    int main()
    {
        int v = Rechnen();
        Rechnenmiti(v);
        return 0;
    }
    

    LG
    -Lima-



  • Limatex schrieb:

    Weil es nicht nur eine Zahl ist?

    Ja - und vor allem weil Arrays nicht per Wert übergeben werden, sondern nur Zeiger in die Arrays - aber die Parameter-Übergabe funktioniert trotzdem:

    void Rechnen(int Array[], int size) // die Länge des Arrays ist dem Compiler egal
    {
        for (size_t i=0;i<size;i++)
        {
            cin >> Array[i];
        }
    }
    void Rechnenmiti(int Array[], int size)
    {
        for (size_t i=0;i<size;i++)
        {
            cout << Array[i];
        }
    }
    
    int main()
    {
        int v[3];
        Rechnen(v,3)
        Rechnenmiti(v,3);
        return 0;
    }
    


  • es geht ürinzipiell genauso
    bei dir gibst du aber nicht das array zurück sondern den 4. speicher des arrays (genau, du übergehst die array grenzen)

    der rückgabe typ deiner ersten funktion müsste int[] sein und dann müsstest du return Array; schreiben



  • @CStoll

    Korrigier mal noch Deine Aufrufe, Du hast size vergessen.
    Das könnte verwirren...



  • CStoll schrieb:

    int Rechnenmiti(int Array[], int size)
    {
        for (size_t i=0;i<size;i++)
        {
            cout << Array[i];
        }
    }
    

    void rechenmiti wär in dem Fall wohl besser, weil die Funktion ja keinen wert zurückgeben soll



  • Sorex schrieb:

    void rechenmiti wär in dem Fall wohl besser, weil die Funktion ja keinen wert zurückgeben soll

    Gut beobachtet - das hatte ich von Limatex' Beitrag kopiert und angepasst.

    @Caligula: Hab's berichtigt



  • Skym0sh0 schrieb:

    der rückgabe typ deiner ersten funktion müsste int[] sein und dann müsstest du return Array; schreiben

    Krieg ich dann wirklich das ganze Array, oder nicht vielmehr einen Zeiger auf das lokale Array, dass bei Funktionsende zerstört wird?



  • Belli schrieb:

    Krieg ich dann [...] nicht vielmehr einen Zeiger auf das lokale Array, dass bei Funktionsende zerstört wird?

    Yupp.



  • Wobei mein Compiler eine Signatur:

    int[] funktion()

    gar nicht erlaubt.



  • Ist so auch nicht erlaubt.
    Was du machen kannst ist folgendes: http://ideone.com/f8jll


Anmelden zum Antworten