Programmieren in C

C fortgeschritten II
Adressverschiebung

In C kannst du unter bestimmten Voraussetzungen Adressen verschieben. Wie das genau funktioniert erklären wir dir in diesem Beitrag!

Voraussetzungen für eine Adressverschiebung

Adressverschiebung
Für eine Adressverschiebung muss gelten t* = x

Als Erstes solltest du wissen, unter welchen Voraussetzungen du Adressen überhaupt verschieben kannst. In Fachsprache ausgedrückt ist eine Verschiebung möglich, wenn ein adresswertiger Ausdruck vom Typ t* vorliegt und dieser einen Wert x besitzt. Außerdem muss er noch eine endliche Länge von n Element N aufweisen.

Adressverschiebung – Beispiel

Da mit dieser abstrakten Beschreibung allerdings keinem geholfen ist, schauen wir uns das Ganze an einem Beispiel an:

Wir deklarieren einen Zeiger p vom Typ char und weisen ihm den Wert “Beispiel“ zu.

Adressverschiebung
Beispiel: Deklarierung eines Zeigers p mit Wert „Beispiel“

Damit ist der Typ des Pointers char. Wir haben also einen gültigen Typ t*. Mit ‘Beispiel‘ haben wir außerdem einen gültigen Wert x, der uns auch mit einer endlichen Länge von neun versorgt. Warum neun? Das liegt daran, dass eine Zeichenkette immer mit einer binären Null beendet wird.

Dein Zeiger liegt nun also so im Speicher:

Adressverschiebung
Zeiger „Beispiel“ mit endlicher Kette von 9

Änderung der Adresse von p

Wenn du jetzt die Adresse von p auf die Speicherzelle, die ‘s‘ enthält, ändern möchtest, geschieht das nach dem adresswertigen Ausdruck (n * sizeof(t)) + a. Beginnen wir diesmal von hinten. Das a steht für unsere derzeitige Speicheradresse, die im Moment die ist, die B enthält. Wir können aber nicht einfach die Speicherzellen hochzählen. Das liegt daran, dass verschiedene Variablentypen unterschiedlich große Speicherbereiche benötigen.

Adressverschiebung
Änderung der Adresse von p

Wir machen jetzt aber erst einmal hier weiter. Zu unserem Glück braucht nämlich eine Variable vom Typ char nur eine Speicherzelle, also 8 Bit Speicher. Wenn wir das auf unsere allgemeine Formel übertragen, heißt das, dass sizeof(t) eins ist. Nun müssen wir noch für n die Anzahl der Werte, um die wir unsere Adresse verschieben wollen, einsetzen.

Adressverschiebung
Die Variable vom Typ char braucht nur 8 Bit Speicher

Super! Damit weißt du jetzt schonmal theoretisch, wie diese Verschieberei funktioniert! Allerdings musst du auch hier – wie bei den meisten anderen Befehlen auch – vorsichtig sein. Verschiebst du nämlich eine Adresse zu weit und biegst damit deinen Zeiger in einen nicht reservierten Speicherbereich, kann es durch deine Schreib- und Leseoperationen zu Fehlern kommen.

Änderung der Adresse von Zeigern und Arrays

Die Notation für diesen Befehl ist für Zeiger und für Arrays etwas unterschiedlich. Wollen wir die Adresse eines Zeigers ändern, entspricht die neue Adresse p + n p[n] oder auch *(p+n). Damit können wir die Adresse eines Zeigers ganz unkompliziert verschieben. Bei Feldern müssen wir uns allerdings einige extra Dinge merken. Hier entspricht array + n nämlich &array[n]. Array[n] würde uns in diesem Fall zum Wert der Speicherzelle und nicht zu deren Adresse führen. Die zweite Möglichkeit, Adressen von Feldern zu verschieben, ist wieder mit der der Zeiger identisch. *(array +n) entspricht nämlich genauso array[n].

Adressverschiebung
Änderung der Adresse von Zeigern und Arrays

Daraus können wir jetzt folgern, dass char a[] und char * a sich nicht nur gleich anhören, sondern, was die Übergabe als Eingabeparameter angeht, nahezu identisch sind. Bei beiden wird immer eine Adresse übergeben und in der betreffenden Funktion mit einem Zeiger gerechnet.

Als Letztes noch ein Tipp: Du kannst mit dem Kaufmannsund auch die Adresse eines Arrays ausgeben. Ist das nicht praktisch?

Jetzt bist du bestens über die Adressverschiebung informiert und kannst gleich selbst loslegen ein paar zu verschieben!

Hallo, leider nutzt du einen AdBlocker.

Auf Studyflix bieten wir dir kostenlos hochwertige Bildung an. Dies können wir nur durch die Unterstützung unserer Werbepartner tun.

Schalte bitte deinen Adblocker für Studyflix aus oder füge uns zu deinen Ausnahmen hinzu. Das tut dir nicht weh und hilft uns weiter.

Danke!
Dein Studyflix-Team

Wenn du nicht weißt, wie du deinen Adblocker deaktivierst oder Studyflix zu den Ausnahmen hinzufügst, findest du hier eine kurze Anleitung.