19 - 2.5.2 C-Kurzeinführung: Felder von Zeigern, Argumente aus der Kommandozeile [ID:15020]
50 von 173 angezeigt

Wir haben uns jetzt mit Feldern und Zeigern beschäftigt und Felder,

hatten wir ja gesehen, sind letztendlich Verbunddatentypen, in denen mehrere

Daten des selben Typs hintereinander stehen, zum Beispiel mehrere Integerwerte. Zeiger sind

letztendlich ja auch ganz normale Variablen, in denen aber halt nicht normale Werte stehen,

sondern Andressen stehen. Und wenn man jetzt von Integerwerten Felder bilden kann, dann stellt sich

natürlich die Frage, warum kann man nicht eigentlich auch von Zeigern Felder bilden? Und das kann man

natürlich. Und mit diesem Thema wollen wir uns jetzt in diesem Abschnitt etwas näher beschäftigen.

Also man kann auch von Zeigern Felder bilden, ganz genauso wie man das von normalen Variablen

tun kann. Wenn ich jetzt zum Beispiel ein Feld von Integer-Zeigern anlegen möchte, dann würde ich

das eben so definieren. Integer Stern p-Feld von 5. Damit ist p-Feld ein Feld, in dem fünf Integer-

Pointer stehen. Und dann haben wir hier noch ein Integerwert i ist gleich 1. Das ist also eine ganz

normale Variable vom Typ integer, in der ein 1 steht und ein j, das ist auch eine normale Variable,

die es nicht initialisiert. In der Zugriff auf einen Zeiger des Feldes passiert jetzt ganz normal,

wie wir das mit Feldzugriffen kennen. P-Feld von 3 beispielsweise wäre natürlich hier p-Feld von 0,

1, 2, 3, wäre dieses Feldelement hier. Das heißt, ich nehme den Feldnamen, der ja auf den Anfang des

Feldes zeigt, addiere 3, also im Prinzip drei Elemente weiter, bekomme also dann den Zeiger auf

dieses Element im Sternchen. Das verbirgt sich ja hinter diesem äcklichen Klammeroperator, laufe ich

den nach und habe als Ergebnis diese Zelle hier. Diese Zelle hier ist vom Typ integer Stern und der

kann ich jetzt natürlich den Zeiger auf den Integerwert zuweisen, also zum Beispiel die Adresse

von dieser Variablen i, die ich mit und i ermittle. Und dann zeigt dieser Zeiger anschließend eben auf

die Variable i, also auf die Speicherzelle, in der diese 1 steht. Und wenn ich jetzt der Variablen j,

den Inhalt des Objekts, auf das der Zeiger aus diesem P-Feld verweist, zuweisen möchte,

dann schreibe ich eben so was hin, wie j ist gleich Stern, P-Feld von 3. Es wird also dann eben

P-Feld von 3 genommen, das ist dieser Zeiger und mit dem Sternchenoperator laufe ich ihm nach,

damit habe ich den Inhalt dieser Speicherzelle, die 1, und die weise ich dann der Variablen j zu.

Dann passiert das hier. Das ist also das, was beim Zugriff auf Felder von Zeigern und beim

Arbeiten mit den einzelnen Elementen eines solchen Feldes passiert. Es gibt eine Stelle,

wo man sowas richtig häufig braucht und das sind Felder von Zeichenketten. Zeichenketten sind ja

Characterfelder und wenn ich jetzt beispielsweise hier ein Feld von Monatsnamen anlegen möchte,

dann kann ich das folgendermaßen tun. Ich lege mir hier ein Array an, das lege ich auch static an,

weil das soll natürlich jetzt nur beim Start des Programms initialisiert werden und nicht bei jedem

Aufruf dieser Funktion und auch über mehrere Funktionsaufrufe erhalten bleiben, denn das ist

ja ein Feld, das möchte ich nicht weiter verändern. Das ist jetzt ein Feld, das heißt Monatsnamen,

das ist ein Feld von Characterpointern. Ich lasse die Felddimension hier weg, denn es wird mit

mehreren Strings initialisiert. Das heißt, es wird mit den Zeigern auf die Zeichenketten,

die jetzt hier im Anschluss aufgeführt sind, initialisiert. Was dann im Speicher bei rauskommt,

ist, dass das Monatsnamen ein Feld ist, das aus einer Reihe von Zeigern besteht und der erste

Zeiger zeigt auf das U der Zeichenkette unzulässiger Monat. Der zweite Zeiger, also Monatsnamen von 1,

zeigt auf das J von Januar, Monatsnamen von 2 auf das F von Februar und Monatsnamen 12 auf das D

von Dezember. Das wäre jetzt eine einfache Funktion. Monthname, der übergebe ich einen Wert und die

liefert mir einen Zeiger auf die entsprechende Zeichenkette, also letztendlich den String zurück,

der für diese Monatsnummer steht. Wenn ich jetzt hier eine 1 übergebe, dann wird hier für den

Fall das n kleiner 0 oder n größer 12, es wird Monatsname von 0 zu 0 gegeben und ansonsten Monatsname

von n. Wenn ich also 1 übergebe, wird Monatsname von 1 zurückgegeben. Das heißt, es wird dieser

Zeiger hier, der Zeiger auf das J von Januar, der wird zurückgegeben. Die Funktion liefert

ja einen Characterpointer zurück. Und für den Fall, dass ich kleiner 0 oder größer 12 übergeben

habe für das n, wird einfach Monatsname von 0 zurückgegeben, eben unzulässiger Monat. Und damit

haben wir eine ganz simple Funktion, die eben eine Zahl, eine Monatszahl in einen String umwandelt.

Eine andere Stelle, wo solche Characterarrays auch ganz intensiv verwendet werden, sind die

Argumente aus der Kommandozeile. Das hatten wir beim ersten Beispiel einer Mainfunktion mal ganz

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:19:26 Min

Aufnahmedatum

2020-05-05

Hochgeladen am

2020-05-05 18:46:37

Sprache

de-DE

Tags

module programmstruktur Variablen Datentypen Preprozessor Gültigkeit
Einbetten
Wordpress FAU Plugin
iFrame
Teilen