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