presswurst - Fr 13.07.07 15:27
Titel: Arrays und Zeigerarithmetik
Hallo Community!
Heute habe ich mich mal ein bisschen mit statischen Arrays befasst, in
http://www.dsdt.info/grundlagen/sprache/prozfunk.php (siehe Array-Parameter) habe ich gelesen dass es moeglich ist Arrays an Funktionen zu uebergeben indem man sie als Datentyp definiert.
Da ich aber direkt von C hierher komme erscheint mir diese Art das zu machen etwas fremd und ich habe mal etwas ausprobiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure dim1display(a : pinteger; e : integer; lb : TListBox); var c : integer;
begin for c := 0 to (e - 1) do begin lb.items.add(inttostr(c) + ': ' + inttohex(a^, 2)); inc(a); end; end;
procedure TForm1.Button4Click(Sender: TObject); var a: array [0..10] of integer; i: integer;
begin
for i := 0 to 10 - 1 do begin a[i] := 48 + i; end;
dim1display(@a, 10, listbox1); end; |
In TForm1.Button4Click wird das Array 'a' mit 10 Integer-Elementen gefuellt 0 = 48, 1 = 49 usw, die Adresse von 'a' wird dann an die Prozedur dim1display uebergeben.
Und genau dort beginnen meine Fragen:
1.: Ist diese Vorgehensweise in Delphi ueberhaupt ueblich bzw. notwendig?
2.: Ich haette gerne mehr Informationen ueber Zeigerarithmetik unter Delphi, hat jemand einige empfehlenswerte Internetseiten?
Ich habe in dem Beispiel die Adresse von 'a' mit einem inc() erhoeht, dabei scheint er automatisch 'adresse = adresse + sizeof(integer)' durchzufuehren? - Wenn das fuer Zeigerarithmetik nicht vorgesehen ist nehmt es mir nicht krumm, deswegen frage ich ja ;)
lg, presswurst
Yogu - Fr 13.07.07 21:40
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure DimlDisplay(Items: array of Integer; LB : TListBox); var i : Integer; begin for i := Low(Items) to High(Items) do begin LB.Items.Add(IntToStr(i) + ': ' + IntToHex(IntToStr(Items[i]), 2)); end; end;
procedure TForm1.Button4Click(Sender: TObject); var Items: array[0..10] of integer; i: Integer; begin for i := 0 to 10 - 1 do begin Items[i] := i+48; end;
DimlDisplay(Items, ListBox1); end; |
Kleine Befehlsbeschreibung:
Low: Erster Index eines Arrays
High: Letzer Index eines Arrays
array of [type]: Kann nur als Parameter oder Eigenschaft eines Objekts verwendet werden, einzelne Elemente mit for-Schleife und Low+High ermitteln
Ob das mit Pointern sinnvoll ist, ist eine gute Frage, aber ich verwende lieber für Arrays.