![]() |
procedure...(var i,j: integer) - Erklärung für das "var
Hi!
Ich schreibe am Dienstag eine Informatik-Klausur. Wir hatten da unter anderem eine procedure, die 2 Integer-Zahlen vertauscht:
Delphi-Quellcode:
Ich verstehe aber trotzdem nicht so genau, für was man das "var" braucht, denn ich weise doch mit
procedure TForm1.Swap(var Zahl1,Zahl2: integer);
var h: integer; //Hilfsvariable begin h:=Zahl1; Zahl1:=Zahl2; Zahl2:=h; end;
Delphi-Quellcode:
eindeutig die Werte den entsprechenden Variablen zu. :gruebel:
h:=Zahl1;
Zahl1:=Zahl2; Zahl2:=h; Lasse ich jedoch das "var" weg:
Delphi-Quellcode:
Dann geht es nicht, also die Zahlen werden nicht vertauscht.
procedure TForm1.Swap(Zahl1,Zahl2: integer);
var h: integer; //Hilfsvariable begin h:=Zahl1; Zahl1:=Zahl2; Zahl2:=h; end; Mit dem "var" wird ja die Speicheradresse übergeben (Referenzparameter). Ohne das "var" nur die Kopie der Variablen (Werteparameter) ==> soviel hab ich noch verstanden :mrgreen: ) Aber durch die Zuweisung müsste es doch auch ohne "var" gehen. Oder gilt die Vertauschung so nur innerhalb der Procedure? Ich hoffe, mir kann das jemand verständlich erklären. ;) |
Re: procedure...(var i,j: integer) - Erklärung für das "
Hallo Matze,
dann schau Dier mal, was in der OH unter Prozedurdeklarationen steht. |
Re: procedure...(var i,j: integer) - Erklärung für das "
Wie du schon sagst, deklarierst du einen Parameter als var-Parameter, wird der Routine nicht die Kopie der Variablen übergeben, sondern eine Referenz auf die Adresse im Speicher. Ändert die Prozedur jetzt den Wert an dieser Adresse, hat das natürlich auch Gültigkeit für alle anderen Prozeduren. Übergibst du eine Kopie der Variablen, ohne var, dann ist es eben eine Kopie. Mit der kann die Routine anstellen, was sie will, auf das original hat das keine Auswirkung.
|
Re: procedure...(var i,j: integer) - Erklärung für das "
Danke, ich verstehe es jetzt schon etwas bessser?
Komisch, dass Daniel_B seinen Beitrag wieder gelöscht hat :gruebel: |
Re: procedure...(var i,j: integer) - Erklärung für das "
Zitat:
|
Re: procedure...(var i,j: integer) - Erklärung für das "
Er hat ihn gelöscht, nachdem ich ihn daraufhingewiesen habe, dass er sachlich falsch war.
|
Re: procedure...(var i,j: integer) - Erklärung für das "
Ich würde mir da keine großen Gedanken machen, was im Speicher passiert, sondern wie die Logik in Delphi für so was aussieht und was mit den Gültigkeitsbereichen ist.
Prozedur mit Wert-Parametern (ohne VAR) wie Luckie gesagt hat werden die Variablen an die Prozedur übergeben und innerhalb dieser weiterverarbeitet. Außerhalb der Prozedur hat das keinerlei Auswirkungen. Deshalb siehst Du auch nichts von dem Vertauschen. Prozedur mit VAR-Parametern genau wie vorher. ABER !!! Die innerhalb der Prozedur geänderten Parameter werden wieder an das aufrufende Programm zurück geliefert. In dem konkreten Beispiel würde dies z.B. bedeuten, daß beim ersten Aufruf der Prozedur die Zahlen vertauscht würden. Beim nächsten Aufruf werden sie wieder vertauscht, es wäre also alles wie zu Anfang. |
Re: procedure...(var i,j: integer) - Erklärung für das "
Zitat:
Zitat:
Zitat:
|
Re: procedure...(var i,j: integer) - Erklärung für das "
Zitat:
Zitat:
Die beiden Paradigmen CallByValue und CallByReference sind Sprachübergreifen, Du solltest ![]() |
Re: procedure...(var i,j: integer) - Erklärung für das "
Hey danke!
Streitet euch nicht. :warn: :mrgreen: Ihr seid alle echt großartig!! :thumb: Ich kappier's! (ich nehm jetzt mal Luckies Aussage). Das ist nix gegen die anderen!! :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz