Autor |
Beitrag |
mars
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Sa 22.02.03 19:39
Hallo
Ganz kurze Frage:
Ist es Zufall, dass bei mir Arrays ohne Initialisierung immer 0 sind?
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Sa 22.02.03 19:41
Nein, das ist kein Zufall.
_________________ Ist Zeit wirklich Geld?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 22.02.03 20:25
Ne, die Länge eines dynamischen Arrays ist immer erst einmal Null. Grundlagen zu Arrays findest Du auch hier.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: So 23.02.03 00:06
Peter Lustig hat folgendes geschrieben: | Ne, die Länge eines dynamischen Arrays ist immer erst einmal Null. Grundlagen zu Arrays findest Du auch hier.
MfG,
Peter |
gemeint war nicht die Länge, sondern der Wert. Und zwar tritt der Effekt bei dynamischen und statischen Arrays auf...
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: So 23.02.03 00:31
So lange du die statischen Arrays nicht lokal deklarierst (in Prozeduren und Funktionen), werden sie immer mit 0 initialisiert. Die Elemete einer dynamischen Arrays hingegen sind immer auf 0 gesetzt, wenn mit SetLength() die Länge verändert wird.
_________________ Ist Zeit wirklich Geld?
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: So 23.02.03 00:47
Ich fänds praktisch, wenn man ganze Arrays mit einem Wert initialisieren könnte...
z.B. so:
Quelltext
dann hätten alle Werte aus MyArray den Wert 2
Naja man kann halt nicht alles haben...
ist ja immerhin schon etwas, dass automatisch alle globalen Arrays 0 als Wert haben...
Fiji-Fighter
|
|
BungeeBug
      
Beiträge: 901
|
Verfasst: So 23.02.03 10:36
auch das geht ...
Code berichtig!!
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Procedure xxx.xxx VAR i : integer ; // i := laufwariable MyArray : Array of integer; BEGIN SetLength(MyArray,9) // <- Länge des Arrays FOR i := 0 TO High(MyArray) DO BEGIN MyArray[i] := 2; // <- Hier den Wunschwert angeben END; END; |
so sollte das gehn ... is zwar nicht gerade elegant aber es geht (hoffentlich, der Code is NICHT getestet)
MfG BungeeBug
Zuletzt bearbeitet von BungeeBug am So 23.02.03 14:52, insgesamt 1-mal bearbeitet
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: So 23.02.03 11:51
BungeeBug hat folgendes geschrieben: | hoffentlich, der Code is NICHT getestet |
Ich muss dich enttäuschen, denn dein Code produziert eine Access Violation. Du musst das Length() durch High() ersetzen oder ein -1 an das Length() anhängen.
_________________ Ist Zeit wirklich Geld?
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: So 23.02.03 11:51
AndyB hat folgendes geschrieben: | So lange du die statischen Arrays nicht lokal deklarierst (in Prozeduren und Funktionen), werden sie immer mit 0 initialisiert. Die Elemete einer dynamischen Arrays hingegen sind immer auf 0 gesetzt, wenn mit SetLength() die Länge verändert wird. |
Danke. Das war meine gesuchte Antwort! Bisher hatte ich diese Arrays - wie BungeeBug es beschreibt - in einer Schleife auf 0 gesetzt, bis ichs einmal vergass und sich nichts veränderte... 
|
|
BungeeBug
      
Beiträge: 901
|
Verfasst: So 23.02.03 14:51
AndyB hat folgendes geschrieben: | BungeeBug hat folgendes geschrieben: | hoffentlich, der Code is NICHT getestet |
Ich muss dich enttäuschen, denn dein Code produziert eine Access Violation. Du musst das Length() durch High() ersetzen oder ein -1 an das Length() anhängen. |
Ich war mir schon beim schreiben nich ganz sicher ob jetzt Length() oder High() ... naja ich hab mich dann für Length() entschieden  ...
MfG BungeeBug
|
|
Jack Falworth
      
Beiträge: 222
Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
|
Verfasst: Mo 24.02.03 16:36
ich glaub was ihr sucht, ist das hier (jedenfalls für Char und Byte):
procedure FillChar(var X; Count: Integer; Value: Byte)
hier ein kleines bsp:
Quelltext 1: 2: 3: 4: 5:
| var s: array[0..9] of char; begin { Alles mit 2-en füllen } FillChar(s, SizeOf(s), 2); end; |
_________________ Andere zu kritisieren ist mitunter eine Möglichkeit, sich selbst ins bessere Licht zu setzen.
|
|