int(*foo[2])[8][8] = int foo[2][6][8][8] ?



  • hey leute,

    ich arbeite gerade an einer Umsetzung für den x264 Encoder und bin in der Datei
    "encoder.c" auf folgende Zeilen gestoßen:

    [..108..]
    
    int             (*dequant4_mf[6])[4][4]; /* [6][6][4][4] */
    int             (*dequant8_mf[2])[8][8]; /* [2][6][8][8] */
    int             (*quant4_mf[6])[4][4];   /* [6][6][4][4] */
    int             (*quant8_mf[2])[8][8];   /* [2][6][8][8] */
    
    [..113..]
    

    hat jemand eine Idee was her geschiet ? Ich verstehe nicht was die Kommentare zu beudeute haben und es scheint, dass zB. dass

    (*quant4_mf[6])[4][4] ~= quant4_mf[6][6][4][4]

    Kann mir jemand erklären was hier passiert ?

    Danke im Voraus 🙂

    .do



  • (*quant4_mf[6])[4][4] ist nicht das gleiche wie quant4_mf[6][6][4][4], weil (*quant4_mf[6])[4][4] ist ein array auf pointer auf array auf array auf int.

    dh: mit (*quant4_mf[6])[4][4] hast du ein array von 6 pointern, und jeder dieser pointer zeigt auf ein zweidimensionales array vom typ int(*)[4];

    mit quant4_mf[6][6][4][4] hast du aber ein vierdimensionales array vom typ int(*)[6][4][4]



  • Man könnte aber das hier machen:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int (*quant4_mf[6])[4][4];
        for(int i = 0; i < 6; ++i)
        {
            quant4_mf[i] = new int[6][4][4];
        }
        for(int i = 0; i < 6; ++i)
        {
            for(int j = 0; j < 6; ++j)
            {
                for(int k = 0; k < 4; ++k)
                {
                    for(int l = 0; l < 4; ++l)
                    {
                        cout << quant4_mf[i][j][k][l] << endl; //Array ist uninitialisiert, d.h. zufällige Werte
                    }
                }
            }
        }
    }
    

    und hätte dann in quant4_mf ein int[6][6][4][4]. (Jedenfalls solange man mit dem normalen Indexzugriff arbeitet. Die Elemente liegen ja relativ sicher nicht alle hintereinander im Speicher.

    Felix


Log in to reply