Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - falsche array weitergabe an prozeduren
Ironwulf - So 16.04.06 17:20
Titel: falsche array weitergabe an prozeduren
Hy,
erstmal der quelltext :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Procedure Laden; var bla: array[1..9] of Boolean; i: Byte; begin for i:= 1 to 9 Do bla[i]:= False; bla[5]:= True; for i:= 1 to 9 Do If bla[i] = True Then Form1.ListBox1.Items.Add('1') else Form1.ListBox1.Items.Add('0'); mmh(bla); end;
Procedure mmh(bla: array of Boolean); var i: Byte; begin for i:= 1 to 9 Do If bla[i] = True Then Form1.ListBox2.Items.Add('1') else Form1.ListBox2.Items.Add('0'); end; |
so nun das problem in der Prozedur Laden setze ich den wert bla[5] auf True
dann geb ich den array an die prozedure mmh weiter aber dort wird der bla[4] auf True gesetz, woran kann das liegen? und wie änder ich das das dort auch bla[5] True ist?
das ganze mit den listboxen drum rum ist nur damit ich den fehler finde und ihr euch auch mal ein bild von machen könnt falls ich es etwas unglücklich formuliert habe
hoffe mir kann jemand helfen, danke
ich verwend d3 Pro falls es relevant ist
Ironwulf - So 16.04.06 18:38
mmh ich hab grad errinnerungen aus der schul vom vba unterricht ;D
da gabs doch son befehl das der array entweder bei 1 oder bei 0 los geht
das scheint ihr auch irgendwie der fall zu sein
da das erste "item" von dem array auf den 0. der prozedur weiter gibt usw, d.h. am ende fehölt mir ein eintrag und hab dafür halt noch nen [0]
gibts da in delphi auch nen behfehl der das von 0 auf 1 setzt? und kann ich das nur für die eine prozedur festlegen und nicht gleich fürs ganze programm?
fuser - Di 18.04.06 10:37
Hallo Ironwulf
1. Möglichkeit: mit lo und high den Anfang und das Ende des Arrays errechnen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Procedure mmh(bla: array of Boolean); var i: Byte; begin for i:= low(bla) to high(bla) Do If bla[i] = True Then Form1.ListBox2.Items.Add('1') else Form1.ListBox2.Items.Add('0'); end; |
2. Möglichkeit: Mit Records
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type MyRec=Record bla: array[1..9] of Boolean; end;
Procedure mmh(M:MyRec); var i: Byte; begin for i:= 1 to 9 Do If M.bla[i] = True Then Form1.ListBox2.Items.Add('1') else Form1.ListBox2.Items.Add('0'); end; |
Moderiert von
raziel: Delphi-Tags hinzugefügt
Ironwulf - Di 18.04.06 14:09
ok danke :)
Allesquarks - Di 18.04.06 18:16
Ich würde mal behaupten, dass ein array[1..5] im der kompilation als Nullbasiertes benutzt wird, da die nullbasierten array dynamisch besser angesprochen werden können, dass heißt ein aufruf myarray[5] wird übersetzt zu address(myarray)+4*sizeof(myarraycell) oder falls dynamisch mit i einfach i-1 genommen wird. Theoretisch ist es ja nur eine teloskopische Umbenennung der Zellen also trivial nur für manche Sachverhalte verständlicher. Jedenfalls liegt der Fehler meiner Meinung nach darin, dass bei der Übergabe, dass statisch deklarierte nunmal jetzt wie ein ynamisches behandelt werden muss. Lösung gleich immer nullbasiert. Oder bei dynamisierung auf Nullbasiertheit achten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!