Hallo Helmut,
wenn Du schreibst:
pointer = malloc(LINE * ROW * sizeof(float));
dann speicherst Du einen Pointer auf ein 1-dimensionales Array. Das will ich nicht ändern.
Wenn Du den Compiler anweist, ein x-dimensionales Array anzulegen, dann speicherst du auch nur den Pointer auf ein 1-dimensionales Array. Die x-Dimensionalität entsteht allein dadurch, dass der Compiler beim Zugriff eine Rechenregel befolgt, die er aus der Definition des Arryas gewonnen hat
Da es uns nicht gelingt, dem Compiler diese n-dimensionale Rechenregel auf für mit malloc erstellte 1-dimensionale Arrays zu übertragen, sollten wir dem Compiler das Rechnen einfach abnehmen.
An Deinen gewünschten Dimensionen und mallocs usw. ändert das doch überhaupt nichts. Wir erklären lediglich den Compiler für doof und sagen ihm per Makro, wie er Arryay-Indizes zu berchnen hat.
Das ermöglicht uns, alle Arrys uniform als double* anzusprechen, obwohl es natürlich unverändert mehrdimensionale Arrays sind. Double ist einfach der kleinste einzeln adressierbare Element aller Arrays.
Von der Laufzeit, Speicherplatzbedarf oder so ändert sich gar nichts. Wir schließen lediglich vom Start weg Missverständnisse zwischen Compiler und uns aus.
BTW: ich seh übrigens noch nen Fehler in meinem IND-Makro:
#define IND(x,y) ((x * X) + y)
Das große X muss natürlich durch ein großes Y ersetzt werden:
#define IND(x,y) ((x * Y) + y)
Himmel.
Viele Grüße
Wolfgang
Lesezeichen