In CONZEPT 16 besteht die Möglichkeit, dynamisch (d.h. zur Programmlaufzeit), Speicherplatz im Hauptspeicher (RAM) des verwendeten Computersystems zu reservieren. Dadurch ist es auch möglich Daten-Arrays zu realisieren.
Ein typischer Aufruf, um zum Beispiel ein eindimensionales Byte Array der Größe 0 bis DimX in CONZEPT 16 zu reservieren, sieht folgendermaßen aus:
tArray1D # MemAllocate(tDimX+1);
Nach einem erfolgreichen Aufruf der Funktion MemAllocate()
zeigt das zurückgegebene Handle „Array1D“ dann auf das neu reservierte eindimensionale Daten-Array im Hauptspeicher.
In Erweiterung dazu können auch mehrdimensionale Arrays einfach erzeugt werden. Hier ein Beispiel für ein zweidimensionales Array:
sub Create_Array2D
(
aDimX, aDimY : int
):handle;
{
return(MemAllocate((aDimX + 1) * (aDimY + 1)));
}
Um nun in dieses zweidimensionale Array an die Position X,Y Werte schreiben zu können, kann die folgende Routine eingesetzt werden.
sub Set_Value
(
aArray : handle;
aPosX,aPosY,aDimX : int;
aValue : byte
);
{
aArray->MemWriteByte(aPosX * aDimX + aPosY + 1, aValue ,1);
}
Soll jetzt im weiteren Verlauf auf die in das zweidimensionale Array eingetragenen Werte zugegriffen werden, kann folgende Routine verwendet werden.
sub Get_Value
(
aArray : handle;
aPosX,aPosY, aDimX : int
): byte;
{
return(aArray->MemReadByte(aPosX * aDimX + aPosY + 1));
}
Durch den Einsatz der hier gezeigten Routinen ist es nun einfach möglich, auf zweidimensionale Arrays zuzugreifen.
main()
local{
tX,tY,tValue,tDim : int;
tArray2D : handle;
}
{
// Dimension festlegen -> 8 * 8 Array
tDim # 8;
tArray2D # Create_Array2D(tDim,tDim);
// Array füllen
tValue # 1;
for tX # 0 loop inc(tX) while (tX <= tDim)
for tY # 0 loop inc(tY) while (tY <= tDim)
{
tArray2D->Set_Value(tX,tY,tDim,tValue);
inc(tValue);
}
// Array-Wert an Pos 1,1 auslesen
tValue # tArray2D->Get_Value(tDim,1,1);
WinDialogBox(0,'2D Array Value',cnvai(tValue),0,0,0);
tArray2D->Memfree();
};
Einer Erweiterung dieser Funktionalität auch auf N-Dimensionale Arrays steht also nichts mehr entgegen.