Zurück Vor +Ebene Home Inhalt Index Hilfe

Lokale und globale Variablen, Parameterübergabe

Lokale Variable, innerhalb einer Funktion oder Prozedur deklarierte Variable. Eine lokale Variable ist nur innerhalb dieser Funktion oder Prozedur bekannt. Aus dem Hauptprogramm oder aus anderen Unterprogrammen läßt sich nicht auf diese Variable zugreifen.

Globale Variable, im Deklarationsteil des Hauptprogrammes vereinbarte Variable. Eine globale Variable ist im gesamten Programm einschließlich aller Unterprogramme bekannt, und es kann aus jedem Unterprogramm auf diese Variable zugegriffen werden.
 
Eine lokale Variable kann den gleichen Namen wie eine globale Variable erhalten. In diesem Fall ist in dem Unterprogramm unter diesem Namen nur noch die lokale Variable erreichbar. Der Zugriff auf die globale Variable ist dann nicht mehr möglich.
 
Mit jedem Aufruf eines Unterprogrammes wird der Speicherplatz für lokale Variablen neu angelegt. Der Inhalt der lokalen Variablen geht nach dem Rücksprung aus dem Unterprogramm verloren.
 
Die Parameter eines Unterprogrammes stellen ebenfalls lokale Variablen dar, deren Inhalt beim Aufruf des Unterprogrammes durch die aktuellen übergebenen Argumente definiert wird.
 

  
   PROGRAM LokaleVsGlobaleVariable(input, output);
   VAR a,b,c: integer;  (* globale Variable *) 

   PROCEDURE foo(a: integer); (* a ist lokal *) 
   VAR b,d: integer;    (* b und d sind lokal *) 
   BEGIN
      b:=2*a; (* Zuweisung an lokale Variable *) 
      c:=3*a; (* Zuweisung an globale Variable *)
      d:=4*a;  
      writeln('In Prozedur:   ',a:3,b:3,c:3,d:3)
   END; 
 
   BEGIN (* des Hauptprogrammes *)
      a:=5; (* Zuweisung an globale Variablen *) 
      b:=3; 
      c:=-4; 
      writeln('Vor Prozedur:  ',a:3,b:3,c:3); 
      foo(b); 
      writeln('Nach Prozedur:',a:3,b:3,c:3)
   END.
Das Programm erzeugt folgende Ausgabe:
   Vor Prozedur:      5    3  -4 
   In Prozedur:       3    6   9  12  
   Nach Prozedur:     5    3   9
Beim Aufruf eines Unterprogrammes wird im Normalfall der Wert eines aktuellen Argumentes in eine lokale Variable kopiert, auf die dann im Unterprogramm über den Parameternamen zugegriffen werden kann (,, Call-by-value``). Das hat zur Folge, daß
  1. bei großen ARRAYs oder RECORDs als Parameter viel Kopieraufwand durch den Rechner zu leisten ist und
  2. innerhalb des Unterprogrammes Zuweisungen an die Parameter außerhalb des Unterprogrammes keine Wirkung haben.
In PASCAL gibt es einen weiteren Zugriffsmechanismus, bei dem keine Kopie einer Variablen angelegt wird, sondern wobei über den Parameternamen die als Argument übergebene Variable angesprochen wird (,, Call-by-reference``).

In der Parameterliste werden Parametern, auf die mit ,,Call by reference`` zugegriffen werden soll, das Wort VAR vorangestellt.  
 

       
   PROGRAM beispiel(input, output);
   VAR a,b: integer;

   PROCEDURE hoo(VAR x: integer; y: integer); 
   BEGIN
      x:=1; 
      y:=2;
   END; 

   BEGIN (* des Hauptprogrammes *)
      a:=5; 
      b:=6; 
      hoo(a,b); 
      writeln(a:3,b:3)
   END.
Das Programm erzeugt die Ausgabe

1 6

In der Prozedur war x ein VAR -Parameter und damit wurde durch die Zuweisung x:=1 die Variable a , die als Argument angegeben war, verändert. y dagegen war kein VAR -Parameter; damit wurde b durch die Zuweisung y:=2 nicht verändert.
 
Die an VAR -Parameter übergebenen Argumente dürfen nur Variablen sein. Konstanten oder arithmetische Ausdrücke sind hier als Argumente nicht erlaubt.
 
In anderen Programmiersprachen gibt es nicht immer beide Zugriffsmöglichkeiten.
In FORTRAN wird stets Call by reference benutzt, während in C immer Call by value benutzt wird.

Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik