Autor Beitrag
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Sa 22.02.03 19:39 
Hallo

Ganz kurze Frage:
Ist es Zufall, dass bei mir Arrays ohne Initialisierung immer 0 sind?
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 22.02.03 19:41 
Nein, das ist kein Zufall.

_________________
Ist Zeit wirklich Geld?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 23.02.03 00:47 
Ich fänds praktisch, wenn man ganze Arrays mit einem Wert initialisieren könnte...
z.B. so:
ausblenden Quelltext
1:
myarray:=2;					

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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: So 23.02.03 10:36 
auch das geht ...

Code berichtig!!
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: 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... :wink:
BungeeBug
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222

Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
BeitragVerfasst: 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:

ausblenden 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.