Thema: Delphi Frage zu for Schleifen

Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Frage zu for Schleifen

  Alt 3. Mär 2006, 14:49
wenn du bei einer bestimmten Bedingung die Schleife wieder von ganz vorn beginnen lassen wölltest müsstest du die Zählvariable ja zurücksetzen
Delphi-Quellcode:
var LCount: Integer;
    LBreakCount: Integer;
begin
  LBreakCount := 0;
  for LCount := 1 to 5 do
  begin
    ListBox1.Items.Add(IntToStr(LCount));
    if (LCount = 5) and (LBreakCount < 1) then
    begin
      LCount := 0; //auf 0 und nicht 1 weil am Ende der schleife LCount erhöht wird
      inc(LBreakCount);
    end;
  end;
Dabei wird aber der Compiler meckern weil es nicht erlaubt ist innerhalb einer schleife die Zählvariable zu verändern.

Aber es gibt doch eine Möglichkeit diese Zählvariable zu verändern.
Ab hier sollten nur die jenigen weiterlesen die genau wissen was sie tun und sich des Risikos bewusst sind. (schließlich hat es gründe das der Compiler das nicht zulassen will)
Und zwar holen wir uns dazu einfach die Adresse der Zählvariablen und schreiben an diese Stelle im Speicher den gewünschten Wert. Somit ist es keine direkte Zuweisung auf die Zählvariable da wir ja eigentlich irgendwo im Speicher schreiben (und "zufällig" ist es eben die Adresse der Zählvariablen)
Delphi-Quellcode:
var LCount: Integer;
    LBreakCount: Integer;
begin
  LBreakCount := 0;
  for LCount := 1 to 5 do
  begin
    ListBox1.Items.Add(IntToStr(LCount));
    if (LCount = 5) and (LBreakCount < 1) then
    begin
      PInteger(@LCount)^ := 0; //auf 0 und nicht 1 weil am Ende der schleife LCount erhöht wird
      inc(LBreakCount);
    end;
  end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat