2Dim Array zu 1dim Array



  • Hallo,

    ich habe eine 4x4 Matrix, dargestellt als 2dimensionales float Array. Das will ich nun "konvertieren" in ein 1dimensionales Array mit 16 Werten. Ich habe folgendes gemacht:

    float m[4][4];
    float* data = ( reinterpret_cast<float*>( m ) );
    

    und es scheint zu klappen!

    Meine Frage: Ist dieser Code richtig und wird das immer klappen?



  • Wozu den reinterpret_cast? Der bringt den Compiler zum Schweigen!

    float m[4][4]; 
    float* data = &m[0][0];
    


  • theta schrieb:

    Wozu den reinterpret_cast? Der bringt den Compiler zum Schweigen!

    float m[4][4]; 
    float* data = &m[0][0];
    

    Dein Code kompiliert nicht:

    cannot convert from 'float (*)[4][4]' to 'float *'

    Mein Code kompiliert UND funktioniert.



  • Konvertierer schrieb:

    theta schrieb:

    Wozu den reinterpret_cast? Der bringt den Compiler zum Schweigen!

    float m[4][4]; 
    float* data = &m[0][0];
    

    Dein Code kompiliert nicht:

    cannot convert from 'float (*)[4][4]' to 'float *'

    Mein Code kompiliert UND funktioniert.

    Sein Code passt, du hast ihn wohl falsch abgetippt.

    Dein Code stimmt, zeigt aber dem Compiler der Mittelfinger, sollte man nicht machen.


  • Mod

    Konvertierer schrieb:

    Hallo,

    ich habe eine 4x4 Matrix, dargestellt als 2dimensionales float Array. Das will ich nun "konvertieren" in ein 1dimensionales Array mit 16 Werten. Ich habe folgendes gemacht:

    float m[4][4];
    float* data = ( reinterpret_cast<float*>( m ) );
    

    und es scheint zu klappen!

    Meine Frage: Ist dieser Code richtig und wird das immer klappen?

    ja und ja. Es geht auch ohne Cast, wie schon geschrieben wurde. Wenn ein Cast her soll, erscheint es sinnvoll, auch mehr Typinformationen zu bewahren:

    float (&data)[16] = reinterpret_cast<float(&)[16]>( m );
    

Anmelden zum Antworten