Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Pointer und Variable

Jede Variable hat ihre eigene Speicheradresse bei der ein Wert abgelegt ist. In dieser Übung werden Pointervariable eingeführt: ein Variablentyp, der Adressen statt Werte speichert.

Es wird gezeigt, wie Pointervariable zur Speicherung von Adressen von Variablen eingesetzt werden und wie man den an einer bestimmten Adresse abgespeicherten Wert findet.

Ein Testprogramm

In diesem Programm werden zwei Variable, varA und varB vom Typ int deklariert und es wird gezeigt, wie mit Hilfe von addr der bei varA abgespeicherte Wert und seine Adresse ausgelesen werden können.

In einem zweiten Schritt wird dann die Adresse von varB der Variablen addr zugewiesen und der Wert, der in varB abgespeichert ist und seine Adresse ausgelesen.

Abbildung 1 - Terminalausgabe zum Testprogramm
Aufgaben
  • Lege ein neues Projekt über Project – New Project an und lege über Create New Folder einen neuen Ordner Datenpointer an.
  • Öffne den Ordner Datenpointer.
  • Benenne die neue Datei Pointer und Variable.
  • Gib den Programmcode in die SimpleIDE ein und speichere das Programm ab.
  • Starte das Programm über Run with Terminal.
  • Überprüfe den Bereich addr = &varA im SimpleIDE Terminal. Überzeuge dich, dass &varA und addr übereinstimmen und das varA und *addr beide 100 sind.
  • Überprüfe ebenso im Bereich addr = &varB, ob &varB und addr übereinstimmen und das varB und *addr beide 200 sind.

Das Programm Pointer und Variable.c

Programm Pointer und Variable.c

Wir arbeitet das Programm?

Zeilen 3 – 5

Es werden zwei Variablen, varA und varB vom Typ int, deklariert und initialisiert. Ihnen werden die Werte 100 und 200 zugewiesen. Die Variable addr speichert Adressen. Das Sternchen (*) links neben dem Bezeichner addr ist für den C Compiler der Hinweis Adressen von Variablen vom Typ int zu speichern. Wir bezeichnen solche Sternchen-Variablen als Pointer.
  • int *addr;
    

Nach dieser Deklaration können der Variablen addr Adressen von Variablen zugewiesen werden. Dazu muss der Variablen der Operator & vorangestellt werden.

Abbildung 2 - Speicheradressen, Bezeichner, Speicherinhalt

Zeile 9

Weist der Variablen addr die Adresse von varA zu.

  • addr = &varA;
    

Zeile 10

Gibt im Terminalfenster die Adresse der Variablen varA aus.

  • print("addr = &varA;\n\n");
    

Zeile 11

Durch den vorangestellten Operator & wird die Adresse der Variablen varA ausgegeben.

Zeile 12

Gibt den Speicherinhalt von varA im Terminal aus.

 

Zeile 13

Gibt den Speicherinhalt von addr aus.

 

Zeile 14

Gibt den Speicherinhalt an der Adresse, die in *adress gespeichert ist, aus.

 

Die Betrachtungen für die restlichen Zeilen des Programms laufen ähnlich.

Ein * Operator, der unmittelbar links vor einer Variablen steht, macht diese zu einer Pointervariablen, die Adressen speichert, keine Werte.

Ist in addr die Adresse von varA gespeichert, dann liefert *addr den Wert, der in der Variablen varA gespeichert ist.

Ohne den * Operator gibt eine Pointervariable wie addr nur die zuletzt gespeicherte Adresse aus. 

Pointervariable lassen sich auch in Arrays verwenden. Sei arrayVar der Name eines Arrays vom Typ int. Die Adresse jedes einzelnen Elementes kann nach addr kopiert werden.

Wenn addr die Adresse von arrayVar[0] enthält, wird durch Addition von 1 der Pointer auf die Adresse von arrayVar[1] zeigen, obwohl die Adresse 4 Byte entfernt liegt. Mit anderen Worten, addr = addr + 1 oder addr++ addiert automatisch 4 zur Variablen addr und lässt sie auf das nachfolgende Feldelement zeigen.

Bei einem Char-Feld sind die einzelnen Arrayelemente nur 1 Byte voneinander entfernt. Und auch hier funktioniert die automatische Anpassung.

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf