07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

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.

c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 112<br />

(10.25)<br />

(a)<br />

(b)<br />

Allgemeine Regeln für die Interpretation von Typen bei Deklarationen:<br />

VariablenDefinition [NV] Typ Deklarator [- , Deklarator ]- 0..n ;<br />

Typ (hier) 12 DeklSpezifizierer1..n<br />

30 Deklarator [NV] 32 DirekterDeklarator<br />

|<br />

|<br />

31 - * &<br />

32DirekterDeklarator Bezeichner (d. h. Name)<br />

32DirekterDeklarator[KonstAusdropt] <br />

- 30 Deklarator<br />

|<br />

| ( 30Deklarator ) |<br />

|<br />

• (Ohne Referenz-Deklarationsoperator &:)<br />

Tritt der Deklarator nach dem Deklarationspunkt auf, so ist er vom angegebenen<br />

” Typ“.<br />

• (Bei Vorhandensein des Referenz-Deklarationsoperators &:)<br />

Tritt der Deklarator (OHNE den &-Deklarationsoperators) nach dem Deklarationspunkt<br />

auf, so ist er vom Typ ” Referenz auf Typ“.<br />

Regeln zur Bestimmung des Typs eines Namens innerhalb eines Deklarators:<br />

Je Stufe wird genau einer der Deklarationsoperatoren (* bzw. [ ] [NV] ) weggelassen, und<br />

zwar immer der Operator mit der augenblicklich niedrigsten Bindung. Es gelten dabei folgende<br />

Regeln:<br />

• Ist *A vom Typ ” T“, so ist A vom Typ ” Zeiger auf T“.<br />

• Ist A[KonstAusdropt] vom Typ ” T“, so ist A vom Typ ” Array, bestehend aus Komponenten<br />

des Typs T“ (Anzahl der Komponenten entspr. KonstAusdr; wenn fehlend,<br />

dann unbestimmte Anzahl).<br />

Regel zur Unterscheidung zwischen Typ und Deklarator (zweite Zeile in obigem Kasten):<br />

Man beginne hinten beim Semikolon und finde, falls vorhanden, das vorderste Komma (bis<br />

dahin: nur Deklaratoren). Nun gehe man weiter nach links und suche und überspringe, falls<br />

vorhanden:<br />

• einen Namen (ggf. vorhandene eckige Klammernpaare überspringen),<br />

• dann ein oder mehrere Zeichen * oder & (mit ggf. dazwischenliegenden const’s, s. (10.28)),<br />

• dann, falls runde schließende Klammern übersprungen wurden, die zugehörigen öffnenden<br />

Klammern.<br />

Jetzt ist man an dem Trennpunkt zwischen Typ und Deklarator.<br />

Bei einer Definition wird nicht Speicherplatz für den Deklarator, sondern für den<br />

Namen reseviert.<br />

In ähnlicher Weise wird eine ggf. vorhandene Initialisierung auf den Namen (der den<br />

Speicherplatz erhält) angewendet, nicht auf den Deklarator.<br />

Bsp char *zeig=0; // zeig (d. h. Zeiger auf char) wird initialisiert mit 0, nicht *zeig.<br />

(10.26) Wichtige Regel zum Umgang mit Arrays (Zusammenhang zwischen Array und Zeiger) –<br />

bereits in (5.65b, 7.46 ↑↑) erwähnt:<br />

Ein Arrayname bzw. eine Arraybezeichnung ( ” Array, bestehend aus Elementen des<br />

Typs T“) wird durch den Compiler automatisch umgewandelt in ” Zeiger auf T“, und<br />

zwar die Adresse des ersten Elements (Element mit Index 0).<br />

Implizit wird demnach ArrayBezeichnung umgewandelt in &ArrayBezeichnung[0]<br />

Insbesondere findet diese Umwandlung immer bei formalen und bei aktuellen Funktionsparametern<br />

statt.<br />

Die (wesentlichen) Ausnahmen von obiger Regel sind:

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!