Seite 1 von 1

Array über DataSection

Verfasst: 03.03.2018 20:45
von Josh
Kann ich eine Array irgendwie über eine DataSection legen? Irgendwie in der Art wie:

Code: Alles auswählen

DataSection

  MyDataSection:
  
  Data.i 00, 01, 02, 03, 04
  Data.i 10, 11, 12, 13, 14
  Data.i 20, 21, 22, 23, 24
  Data.i 30, 31, 32, 33, 34
  Data.i 40, 41, 42, 43, 44

EndDataSection

Dim *x (4,4)
*x = ?MyDataSection
;*x() = ?MyDataSection

Debug *x (2,2)
Bei Lists und Maps funktioniert es ja auch, dass eine List/Map nur aus Pointern besteht.

Re: Array über DataSection

Verfasst: 03.03.2018 20:58
von STARGÅTE
>> Bei Lists und Maps funktioniert es ja auch, dass eine List/Map nur aus Pointern besteht.
Das geht bei Array ja auch, aber das willst du hier ja garnicht.

Du willst ja ein Array auf Integers. Hier kannst du zB ein static array benutzten:

Code: Alles auswählen

DataSection

  MyDataSection:
  
  Data.i 00, 01, 02, 03, 04
  Data.i 10, 11, 12, 13, 14
  Data.i 20, 21, 22, 23, 24
  Data.i 30, 31, 32, 33, 34
  Data.i 40, 41, 42, 43, 44

EndDataSection


Structure IntegerArray
	i.i[0]
EndStructure


Define *x.IntegerArray = ?MyDataSection

Debug *x\i[2+5*2]
Ansonsten musst du das Array einfach mit CopyMemory befüllen.

Code: Alles auswählen

DataSection

  MyDataSection:
  
  Data.i 00, 01, 02, 03, 04
  Data.i 10, 11, 12, 13, 14
  Data.i 20, 21, 22, 23, 24
  Data.i 30, 31, 32, 33, 34
  Data.i 40, 41, 42, 43, 44

EndDataSection

Dim x.i(4,4)
CopyMemory(?MyDataSection, @x(), 5*5*SizeOf(Integer))


Debug x(2,2)



Re: Array über DataSection

Verfasst: 03.03.2018 21:21
von mk-soft
Etwas angepasst <)

Code: Alles auswählen

DataSection

  MyDataSection:
  
  Data.i 00, 01, 02, 03, 04
  Data.i 10, 11, 12, 13, 14
  Data.i 20, 21, 22, 23, 24
  Data.i 30, 31, 32, 33, 34
  Data.i 40, 41, 42, 43, 44

EndDataSection


Structure IntegerArrayColumns
  col.i[5]
EndStructure

Structure IntegerArray
  row.IntegerArrayColumns[0]
EndStructure


Define *x.IntegerArray = ?MyDataSection

Debug *x\row[1]\col[4]

Debug *x\row[4]\col[2]

Re: Array über DataSection

Verfasst: 03.03.2018 22:35
von Josh
Danke euch für den Hinweis mit der Struktur. Hatte ich nicht bedacht.
STARGÅTE hat geschrieben:>> Bei Lists und Maps funktioniert es ja auch, dass eine List/Map nur aus Pointern besteht.
Das geht bei Array ja auch, aber das willst du hier ja garnicht.
Eigentlich will ich schon genau das. Eine *MyList() besteht halt zwangsweise aus einem Pointer je Listeintrag.

Trotzdem bleibt für mich die Frage, was macht Dim *x (4,4) eigentlich. Sieht für mich so aus, als ob Pb ein ganz normales Array anlegt, was es eigentlich nicht sollte. In diesem Fall würde ich das sogar als Bug einstufen.

Re: Array über DataSection

Verfasst: 03.03.2018 22:40
von mk-soft
Dim fordert immer ein zusammenhängenden Speicher an

Somit ist: Dim x(4,4) ein Bereich von x(0..4, 0..4), somit ein Bereich von 25 Integer.
Der Zugriff auf die richtige Adresse wird dann berechnet.

Ein Dim *x(4,4) ist ein Speicherbereich von 25 Pointern

Re: Array über DataSection

Verfasst: 03.03.2018 22:46
von Josh
mk-soft hat geschrieben:Ein Dim *x(4,4) ist ein Speicherbereich von 25 Pointern
Eigentlich auch klar *schäm*