Autor Beitrag
presswurst
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 13.07.07 15:27 
Hallo Community!

Heute habe ich mich mal ein bisschen mit statischen Arrays befasst, in www.dsdt.info/grundl...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:

ausblenden 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 - 1do begin
    lb.items.add(inttostr(c) + ': ' + inttohex(a^, 2));
    inc(a);
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  a: array [0..10of 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 13.07.07 21:40 
ausblenden 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..10of 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.
presswurst Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 13.07.07 22:07 
Ich dachte 'array of [type]' ist nur bei dynamischen Arrays benutzbar. Aber okay wenn es so funktioniert spare ich mir das mit den Zeigern und ueberlasse dem Compiler die Arbeit :)

Danke :)