Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Arrays initialisieren
mars - Sa 22.02.03 18:39
Titel: Arrays initialisieren
Hallo
Ganz kurze Frage:
Ist es Zufall, dass bei mir Arrays ohne Initialisierung immer 0 sind?
AndyB - Sa 22.02.03 18:41
Nein, das ist kein Zufall.
mars - Sa 22.02.03 23:06
gemeint war nicht die Länge, sondern der Wert. Und zwar tritt der Effekt bei dynamischen und statischen Arrays auf...
AndyB - Sa 22.02.03 23: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.
Raphael O. - Sa 22.02.03 23:47
Ich fänds praktisch, wenn man ganze Arrays mit einem Wert initialisieren könnte...
z.B. so:
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 - So 23.02.03 09: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
AndyB - So 23.02.03 10: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.
mars - So 23.02.03 10: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... :wink:
BungeeBug - So 23.02.03 13: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 - Mo 24.02.03 15: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; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!