Autor |
Beitrag |
Christian V.
      
Beiträge: 311
Win Xp Prof
Turbo Delphi 2005
|
Verfasst: Sa 14.04.07 14:39
Hallo,
Was steht in einem Dynamischen Array drin wenn ich ihn um eins vergrössere? Zufällige Daten?
Muss ich den zuerst noch auf den gewünschten Wert setzten? Oder hat er einen bestimmten Anfangswert?
Arrays sehen so aus:
Array of Array[1..81] of Integer; //Gewünschter Anfangswert: 0
Array of Array[1..9,1..9,1..9] of Boolean; //Gewünschter Anfangswert: false
_________________ Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
|
|
Roadrunner25
      
Beiträge: 89
Win XP
D7
|
Verfasst: Sa 14.04.07 14:45
sind dynamische arrays nicht nullbasiert und haben eh den index 0?
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 14.04.07 14:47
das ist aber kein dynamisches array, sondern ein statisches
Willst du alles auf einen Anfangswert setzen, nimmst Du einfach die FillChar Methode 
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Christian V. 
      
Beiträge: 311
Win Xp Prof
Turbo Delphi 2005
|
Verfasst: Sa 14.04.07 14:48
Ja klar, aber nur dort wo der Dynamisch ist:
Delphi-Quelltext 1: 2: 3: 4:
| DynArray:Array of Array[1..9,1..9,1..9] of Boolean;
setLength(DynArray,1); DynArray[0,1,1,1]:=False; |
@HelgeLange
Ich habe einfach die erste Dimension Dynamisch. Die restlichen will ich immer gleich gross haben.
_________________ Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Sa 14.04.07 14:55
Angeblich sind dynamische Arrays bei der Alloziierung per SetLength initialisiert, d.h. mit $00 belegt. Das stimmt wohl auch, aber ich mache es trotzdem explizit. Ist irgendwie klarer und besser lesbar.
_________________ Na denn, dann. Bis dann, denn.
|
|
Christian V. 
      
Beiträge: 311
Win Xp Prof
Turbo Delphi 2005
|
Verfasst: Sa 14.04.07 14:59
alzaimar hat folgendes geschrieben: | Angeblich...
Das stimmt wohl auch... |
Und was heist das jetzt konkret?
Frage nebenbei, wie werden true und false gespeichert? $FF und $00?
_________________ Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 14.04.07 15:02
Ich sage ja, FillChar
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 16.04.07 09:33
_________________ Na denn, dann. Bis dann, denn.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mo 16.04.07 13:48
HelgeLange hat folgendes geschrieben: | Ich sage ja, FillChar |
Geht nur bei 0 als Anfangswert, alle anderen Werte muss mann über eine Schleife füllen!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Mo 16.04.07 14:20
Delphi-Quelltext 1:
| FillChar(P^, MyArraySize, 1); |
geht bei mir auch mit 1
Du meintest vielelicht ZeroMemory
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 16.04.07 14:35
Helge, was passiert, wenn das Array aus Cardinals passiert? Wird dann überall ne $00000001 reingeschrieben, oder eher $01010101?
_________________ Na denn, dann. Bis dann, denn.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mo 16.04.07 14:36
wenn P array of Integer ist????????? (s.o.)
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Mo 16.04.07 14:37
Naja, es fill char 
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mo 16.04.07 14:38
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Christian V. 
      
Beiträge: 311
Win Xp Prof
Turbo Delphi 2005
|
Verfasst: Mo 16.04.07 16:10
_________________ Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Mo 16.04.07 17:45
Ein Blick in die Delphi Hilfe reicht:
Zitat: | Bei einer langen String- oder einer dynamischen Array-Variable weist SetLength dem in S referenzierten String oder Array die angegebene Länge zu. Dabei bleiben die Zeichen im String oder die Elemente im Array erhalten, jedoch ist der Inhalt des neu zugewiesenen Speicherbereichs nicht definiert. Eine Ausnahme stellt das Vergrößern der Länge von dynamischen Arrays dar, in dem die Elemente Typen sind, die initialisiert werden müssen (Strings, Varianten, Variant-Arrays oder Records, die solche Typen enthalten). Wenn S ein dynamisches Typen-Array ist, das initialisiert werden muss, wird der neu zugewiesene Platz auf 0 oder nil gesetzt. |
Ein array of String wird also initialisiert, ein array of Integer nicht. Wenn du ein existierendes Array vergrößerst, bleibt der vorherige Inhalt erhalten, es werden in jedem Fall nur die neuen Elemente initialisiert - dein Beispiel würde also mit jedem Array-Typ das selbe Ergebnis bringen.
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|