04.11.2013 Aufrufe

Variablen Einführung Variablen sind Behälter! Eigenschaften von ...

Variablen Einführung Variablen sind Behälter! Eigenschaften von ...

Variablen Einführung Variablen sind Behälter! Eigenschaften von ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Einführung</strong><br />

<strong>Variablen</strong><br />

Horst Hansen<br />

Hochschule für Technik und Wirtschaft Berlin<br />

Studiengang Angewandte Informatik<br />

Sommersemester 2012<br />

Das Konzept <strong>von</strong> <strong>Variablen</strong> ist eine wichtige Grundlage zum<br />

Verständnis jeder Programmiersprache.<br />

Dabei ist zu beachten, daß das Konzept <strong>von</strong> <strong>Variablen</strong> in der<br />

Informatik — in Programmiersprachen — sich <strong>von</strong> dem Konzept<br />

<strong>von</strong> <strong>Variablen</strong> aus der Mathematik unterscheidet.<br />

c○ Horst Hansen <strong>Variablen</strong> 1<br />

c○ Horst Hansen <strong>Variablen</strong> 2<br />

<strong>Variablen</strong> <strong>sind</strong> <strong>Behälter</strong>!<br />

<strong>Eigenschaften</strong> <strong>von</strong> <strong>Variablen</strong><br />

Das programmiersprachliche Konzept <strong>von</strong> <strong>Variablen</strong> kann man gut<br />

mit dem Begriff <strong>Behälter</strong> aus der Alltagswelt vergleichen: Einen<br />

<strong>Behälter</strong> (Gefäß, Kasten, usw.) beschriftet man mit einer<br />

Aufschrift, die anzeigt, was sich darin befindet. Wenn man dann<br />

über den Inhalt des <strong>Behälter</strong>s sprechen will, verwendet man die<br />

Aufschrift, um sich auf den Inhalt zu beziehen. In solch einem<br />

<strong>Behälter</strong> kann sich zu unterschiedlichen Zeiten eine<br />

unterschiedliche Menge des Inhalts finden sein, z.B. in einem Gefäß<br />

für Zucker gestern 100g und heute 567g.<br />

Für unterschiedliche Arten <strong>von</strong> Inhalten wählt man<br />

unterschiedliche Gefäße. Man kann z.B. nicht Flüssigkeiten in einen<br />

Brotkorb legen oder Brot in eine Milchkanne gießen.<br />

Die folgenden vier <strong>Eigenschaften</strong> <strong>sind</strong> die wichtigsten einer<br />

programmiersprachlichen Variable:<br />

Bezeichner Es gibt einen unveränderbaren Bezeichner (oder<br />

Namen), mit dessen Hilfe sie angesprochen werden.<br />

Typ Sie besitzen einen festen Typ (oder Datentyp).<br />

Wert Sie besitzen einen (variablen) Wert, der kann sich<br />

während der Programmausführung ändert.<br />

Speicherplatz Sie besitzen einen Speicherplatz (den <strong>Behälter</strong>), in<br />

dem ihr Wert abgelegt ist.<br />

c○ Horst Hansen <strong>Variablen</strong> 3<br />

c○ Horst Hansen <strong>Variablen</strong> 4


Definition <strong>von</strong> <strong>Variablen</strong><br />

Deklaration <strong>von</strong> <strong>Variablen</strong><br />

Das soll hier durch die Definition einer <strong>Variablen</strong> in der<br />

Programmiersprache C beispielhaft gezeigt werden:<br />

int n = 0 ;<br />

Hier wird eine Variable mit dem Bezeichner n definiert. Sie ist vom<br />

Typ int und erhält den Anfangswert 0. Für diese Variable wird<br />

(automatisch) so viel Speicherplatz (im Arbeitsspeicher des<br />

Rechners) reserviert, wie dies für Werte vom Typ int festgelegt<br />

ist. Der Anfangswert 0 wird in dem reservierten Speicherplatz<br />

abgelegt.<br />

int n ;<br />

wird als Deklaration einer <strong>Variablen</strong> bezeichnet. Hier wird der<br />

<strong>Variablen</strong> der Bezeichner n zugeordnet und gesagt, daß sie vom<br />

Typ int sein soll. Außerdem wird Arbeitsspeicher für die Ablage<br />

ihres Wertes reserviert.<br />

Aber die Variable n erhält hier keinen Wert zugeordnet. Deshalb<br />

spricht man auch da<strong>von</strong>, daß ihr Wert noch undefiniert ist.<br />

Merke:<br />

In einem guten Programm gibt es keine undefinierten<br />

<strong>Variablen</strong>!<br />

c○ Horst Hansen <strong>Variablen</strong> 5<br />

c○ Horst Hansen <strong>Variablen</strong> 6<br />

Initialisierung <strong>von</strong> <strong>Variablen</strong><br />

Zusammenfassung<br />

n = 0 ;<br />

Wenn dieses die erste Zuweisung eines Wertes an die Variable n<br />

ist, sagt man auch: Die Variable n wird hier initialisiert.<br />

Ein guter Brauch in der Programmierung ist, <strong>Variablen</strong> stets<br />

zusammen mit ihrer Deklaration zu initialisieren. Das nennt man<br />

Definition <strong>von</strong> <strong>Variablen</strong> (siehe oben). Dadurch kann es nie<br />

passieren, daß man im Programm mit undefinierten Werten <strong>von</strong><br />

<strong>Variablen</strong> arbeitet — was natürlich zu Fehlern führen muß.<br />

int n = 0 ;<br />

Hier haben wir die Definition einer <strong>Variablen</strong> vor uns.<br />

Wie man sieht, ist es eine Kurzschreibweise für:<br />

int n ;<br />

n = 0 ;<br />

Somit kann man sich merken:<br />

Definition gleich Deklaration plus Initialisierung<br />

c○ Horst Hansen <strong>Variablen</strong> 7<br />

c○ Horst Hansen <strong>Variablen</strong> 8


Syntax für die Definition <strong>von</strong> <strong>Variablen</strong> (1/2)<br />

Syntax für die Definition <strong>von</strong> <strong>Variablen</strong> (2/2)<br />

Die Syntax für die Definition einer <strong>Variablen</strong> in der<br />

Programmiersprache C sieht so aus:<br />

= ;<br />

Diese Beschreibung verwendet die Syntax <strong>von</strong> Formalen<br />

Grammatiken (vgl. LV Formale Grundlagen). Die in spitzen<br />

Klammern stehenden Wörter (nichtterminale Symbole) müssen<br />

hierbei noch durch terminale Symbole ersetzt werden, um einen<br />

programmiersprachlich gültigen Ausdruck zu formen.<br />

Demgegenüber <strong>sind</strong> die Zeichen ’ ’, ’=’ und ’;’ bereits terminale<br />

Symbole, die unverändert im Programmtext auftauchen.<br />

Statt ist hier eines der Schlüsselwörter der<br />

Programmiersprache für Basisdatentypen einzusetzen, also short,<br />

int, long, float, double oder char. Als <br />

(im englischen id oder identifier) können wir eine fast beliebige<br />

Zeichenkette wählen: Sie muß mit einem Buchstaben beginnen und<br />

danach können beliebig viele Buchstaben und Ziffern folgen. Dies<br />

ist der Name unserer <strong>Variablen</strong>. Den geben wir in einer<br />

<strong>von</strong> der Programmiersprache erlaubten Darstellung an. Diese ist<br />

<strong>von</strong> Typ zu Typ unterschiedlich.<br />

c○ Horst Hansen <strong>Variablen</strong> 9<br />

c○ Horst Hansen <strong>Variablen</strong> 10<br />

weitere <strong>Eigenschaften</strong> <strong>von</strong> <strong>Variablen</strong><br />

Speicherklassen<br />

Gültigkeitsbereich (oder Definitionsbereich)<br />

Sichtbarkeitsbereich<br />

Speicherklasse<br />

Um in C die Wirkung <strong>von</strong> Definitonen und Deklarationen <strong>von</strong><br />

<strong>Variablen</strong> und Konstanten zu beschreiben, die an verschiedenen<br />

Stellen im Programm auftreten und die eventuell durch zusätzliche<br />

Schlüsselwörter qualifiziert <strong>sind</strong>, dient der Begriff Speicherklasse.<br />

Es gibt drei Speicherklassen:<br />

auto<br />

extern<br />

static<br />

c○ Horst Hansen <strong>Variablen</strong> 11<br />

c○ Horst Hansen <strong>Variablen</strong> 12


Speicherklasse auto<br />

Alle lokalen <strong>Variablen</strong> besitzen die Speicherklasse auto (kurz für<br />

automatisch), d.h. für sie wird zum Zeitpunkt der Definition (oder<br />

Deklaration) automatisch der notwendige Arbeitsspeicher auf dem<br />

Laufzeitstack bereitgestellt.<br />

Lokale <strong>Variablen</strong> <strong>sind</strong> solche, die in einem Programmblock, d.h.<br />

einem <strong>von</strong> einer öffnenden Blockklammer { und einer schließenden<br />

Blockklammer } umschlossenen Programmstück vorkommen.<br />

Speicherklasse extern<br />

Alle globalen <strong>Variablen</strong> besitzen die Speicherklasse extern,<br />

d.h. für sie wird Arbeitsspeicher so zur Verfügung gestellt, daß alle<br />

Funktionen des Programms sie benutzen können. Die Bezeichnung<br />

dieser Speicherklasse leitet sich da<strong>von</strong> ab, daß dieser<br />

Arbeitsspeicher extern zu allen Funktionen ist.<br />

Globale <strong>Variablen</strong> <strong>sind</strong> solche, die auf der gleichen Ebene wie<br />

Funktionen, also außerhalb jedes Programmblocks vereinbart<br />

werden.<br />

Weil sie dadurch in allen Funktionen des C-Programms bekannt<br />

<strong>sind</strong> und benutzt werden können, erschweren sie das Verständnis<br />

<strong>von</strong> Programmen sehr. Auch ist es sehr schwer, Fehler, die im<br />

Zusammenhang mit globalen <strong>Variablen</strong> auftreten, zu lokalisieren<br />

und zu beseitigen.<br />

Aus diesen Gründen ist die Benutzung globaler <strong>Variablen</strong> in<br />

dieser Lehrveranstaltung strikt verboten!<br />

c○ Horst Hansen <strong>Variablen</strong> 13<br />

c○ Horst Hansen <strong>Variablen</strong> 14<br />

lokale <strong>Variablen</strong> und die Speicherklasse static<br />

globale <strong>Variablen</strong> und die Speicherklasse static<br />

Sowohl lokale als auch globale <strong>Variablen</strong> können mit dem<br />

Schlüsselwort static versehen werden.<br />

Für lokale <strong>Variablen</strong> mit dem Schlüsselwort static gilt, daß der<br />

Arbeitsspeicher der <strong>Variablen</strong> nicht erst mit Eintritt des Blockes, in<br />

dem die Variable deklariert wird, zur Verfügung gestellt wird,<br />

sondern daß er permanent vorhanden ist und damit der Wert dieser<br />

<strong>Variablen</strong> zwischen zwei Funktionsaufrufen erhalten bleibt.<br />

Für globale <strong>Variablen</strong> mit dem Schlüsselwort static gilt, daß sie nur<br />

in der Quelldatei bekannt <strong>sind</strong>, in der sie deklariert werden, nicht<br />

aber in anderen Quelldateien. Dieses Prinzip kann auch auf<br />

Funktionen übertragen werden: Funktionen mit dem Schlüsselwort<br />

static <strong>sind</strong> nur in der Programmquelle bekannt, in der sie<br />

definiert oder deklariert werden.<br />

Somit dient das Schlüsselwort static zusammen mit externen<br />

Deklarationen dazu, gewisse <strong>Variablen</strong> und Funktionen vor der<br />

Verwendung in anderen Programmteilen zu schützen. So können<br />

gewisse Namenskonflikte in Programmen vermieden werden.<br />

c○ Horst Hansen <strong>Variablen</strong> 15<br />

c○ Horst Hansen <strong>Variablen</strong> 16

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!