Jupp, unterschiedliche Syntax, aber technisch gesehn, sind die Beiden identisch.
Delphi-Quellcode:
xxx: array[0..9] of array[0..9] of Byte;
xxx: array[0..9, 0..9] of Byte;
Rein von den Daten her ist es sogar gleich/kompatibl zu
xxx: array[0..99] of Byte;
ABER, leider ist teilweise das Letzte auch für den Compiler das Selbe.
https://quality.embarcadero.com/browse/RSP-42256
Bei statischen Arrays liegen die Daten der Felder immer hintereinander (zusammenhängend).
Bei dynamischen Arrays stehen nur die Referenzen hintereinander, aber die einzelnen Daten liegen verteilt im Arbeitsspeicher.
Die Daten eines
array[..] of Xyz;
sind direkt im Typ gespeichert und beim
array of Xyz;
noch mit einem Pointer dazwischen.
@Arr[0]
zeigt bei dynamisch und statisch auf die Daten.
@Arr
kommt beim Statischen auf's Gleiche raus, aber beim Dynamischen zeigt es auf den "internen" Array-Pointer.
Und bei
array of array of ...
das Gleiche,
array[..] of array[..] of ...
liegen auch die SubArrays hintereinander,
array[..] of array of ...
bzw
array of array of ...
die SubArrays natülich verteilt liegen.
Kanst das mit Record und Object vergleichen. (so gesehn ist ein Object ein Record mit einem interen Pointer)