typedef array in function



  • typedef int IntegerArray[2];
    
    IntegerArray test()
    {
        IntegerArray ia;
        ia[0]=123;
        ia[1]=456;
        return ia;
    }
    

    Wieso bekomme ich hier folgende Fehlermeldung ?

    .....\Array_zuweissen.cpp|5|error: 'test' declared as function returning an array|
    

    Folgender Code, ohne Array geht:

    typedef int Integer;
    
    Integer abc()
    {
        Integer i;
        i=121;
        return i;
    }
    


  • Weil eine Funktion kein Array zurückgeben kann. Verwend std::array oder bau dir selbst ein struct, das dein Array enthält und return dann ein solches... 😉



  • So geht es:

    #include <iostream>
    
    struct TMatrix
    {
        double matrix[4][4];
    };
    
    TMatrix MatrixIdentity()
    {
        TMatrix m;
        for(int i = 0; i <= 3; i++)
        {
            for(int j = 0; j <= 3; j++)
            {
                m.matrix[i][j] = 0.0;
                //m.matrix[i,j] = 0.0;
            }
        }
    
        return m;
    }
    
    int main()
    {
        TMatrix m;
    
        m = MatrixIdentity();
        for(int i = 0; i <= 3; i++)
        {
            for(int j = 0; j <= 3; j++)
            {
                //std::cout << m.matrix[i, j] << ' ';
                std::cout << m.matrix[i][j] << ' ';
            }
        }
        return 0;
    }
    

    Was passiert hier ?

    Hier kommt eine Kompilerfehler:

    m.matrix[i,j] = 0.0;
    

    Dies kann er kompilieren, kommen aber anstelle von 0, irgendwelche Hex-Ziffern.

    std::cout << m.matrix[i, j] << ' ';
    


  • Das , ist der Kommaoperator.
    Mehrdimensionaler Arrays indizierst du mit [i][j].



  • Das , ist der Kommaoperator.

    Für was wird dieser gebraucht ?

    Über sowas bin ich schon mal gestolpert.

    Ich wollte

    float f=(1.2);
    

    anstelle

    float f=(1,2);
    

    schreiben.

    Da hatte ich lange nach dem Fehler gesucht. 😞



  • Mathuas schrieb:

    Das , ist der Kommaoperator.

    Für was wird dieser gebraucht ?

    Für coole kryptische Sachen.
    Und hauptsächlich für for loops:

    for (...;...;++i, ++j)
      ...
    


  • Siehe Comma Operator. Das hättest du auch selber googeln können 😉



  • Mathuas schrieb:

    Das , ist der Kommaoperator.

    Für was wird dieser gebraucht ?

    (Eigentlich für gar nichts.)

    Naja, manchmal will man zwei Sachen tun, aber sie Sprache verlangt da einen Ausdruck und keine Anweisung.

    for( int i=1,j=2 ; j<=100 ; i+=j,j+=2 )
    

    edit: Auf Arcoths Anreging geändert zu Kubikzahlen.

    for( int i=0,j=1,k=1 ; k<=1000 ; i+=6,j+=i,k+=j )
    		cout<<k<<'\n';
    

  • Mod

    volkard schrieb:

    for( int i=1,j=2 ; j<=100 ; i+=j,j+=2 )
    

    Warum zeigst du so einen Code?
    Nicht lustig.



  • Arcoth schrieb:

    volkard schrieb:

    for( int i=1,j=2 ; j<=100 ; i+=j,j+=2 )
    

    Warum zeigst du so einen Code?
    Nicht lustig.

    Zur Abschreckung?
    Uups, j sollte mit 3 anfangen. Hab ich den Code nicht bei Dir schonmal gesehen? Auf kräftigen Prozessoren (PCs) dürfte MUL für Quadratzahlen schneller sein.


  • Mod

    Zur Abschreckung?

    Ja, das ist gut. Aber dann auch ein bisschen expliziter machen. Werner zu rate ziehen. Einen Schleifenkopf so hässlich schreiben dass man länger als fünf Sekunden braucht um ihn zu verstehen, die Höchstzeit nämlich.

    Auf kräftigen Prozessoren (PCs) dürfte MUL für Quadratzahlen schneller sein.

    Stimmt, das haben wir bereits gesehen.



  • for( int i=1,j=2 ; j<=100 ; i+=j,j+=2
    

    Da kann ich mir noch eine Sinn vorstellen, aber bei folgenden Beispiele habe ich Fragen:

    int b = 10;
        for(int i = 0; i <= 3; i++)
        {
            for(int j = 0; j <= 3; j++)
            {
                std::cout << m.matrix[i][b += 10, j] << std::endl;
                std::cout << b << std::endl;
            }
        }
    

  • Mod

    Extrem sinnlose Anwendung des Komma-Operators. Es ist praktisch äquivalent zu

    std::cout << m.matrix[i][j] << std::endl;
                b += 10;
                std::cout << b << std::endl;
    

    Dabei aber natürlich schwerer zu lesen.


Anmelden zum Antworten