Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Parameter bei Funktionen
kat1 - Di 08.07.03 09:54
Titel: Parameter bei Funktionen
Hallo,
mal ne Frage. Ich dachte eigentlich immer, und so steht es auch in allen Büchern und Tut's, die ich bisher gelesen habe, dass wenn ich eine Funktion folgendermaßen definiere:
Is nur ein Beispiel, meine wirkliche Funktion sieht anders aus, aber das verdeutlicht das Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| function TueEtwas (A:real; b:integer):real; begin A:=A+2; b:=b-2; Result:=A+b; end; |
Nun werden die Parameter A und b ja als Werteparameter übergeben, d.h. es wird eine Kopie erstellt und der Originalparameter in der aufrufenden Prozedur nicht verändert. Jetzt habe ich aber nur mal zum Spaß meine aufrufende Prozedur etwas verändert (auch nur als Test).
Delphi-Quelltext
1: 2: 3: 4:
| TestUnknownsVector:=LU_Decomposition(TestMatrix,3,TestResultVector); Edit1.Text:=DisplayComplex(TestResultVector[0]); Edit2.Text:=DisplayComplex(TestResultVector[1]); Edit4.Text:=DisplayComplex(TestResultVector[2]); |
und bekomme doch tatsächlich die Werte des in der Funktion LU_Decomposition veränderten array's angezeigt.
Weiß jemand, woran das liegt?
Motzi - Di 08.07.03 10:11
Das kommt ganz darauf an wie die Funktion LU_Decomposition deklariert ist bzw. auch was TestResultVector für ein array ist (statisch oder dynamisch). Dyn. Arrays sind nämlich nur Pointer auf die Array-Daten, übernimmt die Funktion LU_Decomposition also einen dyn. Array, so bekommt sie nur einen Pointer auf die Daten und nicht eine Kopie der Daten! Folglich wirken sich Änderungen auch auf die Daten der aufrufenden Prozedur aus, da ja beiden Prozeduren/Funktionen mit ein und denselben Daten arbeiten...
kat1 - Di 08.07.03 10:23
Ah ja, genau das ist der Fehler, die Werte sind natürlich dyn. arrays. Werde also wohl oder übel mit copy eine Kopie anfertigen müssen. Danke für die schnelle Hilfe.
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!