C Felder

Man stelle sich vor, die Software für eine Wetterstation zu schreiben. Die gemessenen Temperaturwerte sollte das Programm zwischenspeichern und die Durchschnittstemperatur des Tages berechnen. Wir haben bereits gelernt, wie man Werte puffert: Dazu verwenden wir Variablen. Im Artikel Felder in C wird die Verwendung von Feldern in der Programmiersprache C beschrieben. Im Gegensatz zu Variablen und Konstanten kann ein C-Programmierer nicht nur einen, sondern mehrere Werte desselben Datentyps in Feldern speichern.

C-Felder

Im Beitrag Felder in C wird die Nutzung von Felder in der Sprache C beschrieben. Anders als Variable und Konstante kann ein C-Programmierer nicht nur einen, sondern mehrere gleichartige Datentypen in Felder eintragen. Die Definition eines Feldes kann auf unterschiedliche Weise erfolgen. Das erste Exemplar ist dreigeteilt. Zunächst aus dem Typ des Feldes, der dem Typ der darin vorkommenden Daten entsprechen muss.

Zum anderen aus dem Wunschnamen des Felds und zum dritten aus der Zahl der in Klammer gesetzten Ausprägungen. Bei der ersten Ausprägung ist das generelle System der Fall: FIELDTYP FELDNAME[INDEX]. Bei der obigen Ausprägung werden die individuellen Felder vom Programmgeber nicht mitinitialisiert. Der Kompilierer setzt die Felder auch nur dann mit 0 initial, wenn es sich um ein globales oder statisches Feld handeln sollte; in allen anderen Fall werden die Felder nicht mit 0 vorbelegt.

Als Alternative zur ersten Ausprägung können die Felder bei der Festlegung des Feldes vorbelegt werden. Der Kompiler bestimmt in diesem Falle die Zahl der übertragenen Daten selbstständig. Bei einer anderen Ausprägung kann der Inhalt des Indizes zu den in der Beschreibung spezifizierten Parametern hinzugefügt werden. Alle nicht spezifizierten Felder lemente werden in diesem Falle mit 0 vorbelegt.

Ein letztes Mal, um ein Halbbild zu hinterlegen, ist nur für Halbbilder vom Typ Character möglich. Er dient zur Initialisierung von Feldern mit einer Zeichenfolge. Es können alle vordefinierten Typen mit Ausnahme von ungültigen und benutzerdefinierten Typen als Feldtypen benutzt werden. Auch die im Eingabefeld vorhandenen Daten werden als Objekt oder Element des Eingabefeldes betrachtet.

Als Feldindex wird die Zahl der im Eingabefeld abgelegten Daten angegeben. Sie können den Inhalt eines einmal definierten Felds nicht mehr ändern, d.h. ein solches ist während der ganzen Programmlaufzeit gleich groß. Eine Kennzahl beginnt immer bei gleichem Wert. D. h. das erste Element steht auf einem Wert von 0, das zweite auf einem Wert von 1 usw.

Weil ein Indiz immer mit dem Wert gleich 0 anfängt, ist es z.B. nicht möglich, ein Halbbild mit den Indices 100 bis 200 anzulegen. Beim Definieren eines Felds fragt der Kompilierer den erforderlichen Platz ab. Der Programmgeber kann die Adresse, unter der sich das Eingabefeld befindet, nicht ändern. Der Speicherbedarf ist abhängig vom Typ der Daten der Feldelemente.

Zum Beispiel beansprucht ein drei Ganzzahlen enthaltendes Halbbild das Dreifache des von einer Ganzzahl benötigten Speicherplatzes. Das Feldelement befindet sich im Arbeitsspeicher unmittelbar hinter dem anderen. Dabei ist die Anschrift des Felds identisch mit der des ersten Feldelementes. Das zweite Feldelement ist die Anschrift des ersten Elementes plus eins, etc. Nach dem Definieren eines Felds können ihm die in der Konfiguration festgelegten Datentypen zuerkannt werden.

Hierzu muss auch der zu platzierende Indikator spezifiziert werden. Beim Lesen oder Schreiben außerhalb des Indexes wird weiterhin auf die entsprechende Speicher-Adresse zugegriffen. Falls die Feldwerte unveränderlich sein sollen, wird ein Konstantenfeld vordefiniert. Konstantenfelder sind nur bei der Initialisierung (bei der Definition) sinnvoll: In C können auch mehrdimensionale Felder verwendet werden.

Jedes dieser Feldelemente selbst ist ein Acker. Wie bei einem multidimensionalen Halbbild werden die Halbbilder unmittelbar nacheinander im Memory zwischengespeichert. In gleicher Weise wird auch auf die Daten zugegriffen. Bei C kann sowohl der Variablenwert als auch ein Pointer auf die betreffende Größe an eine bestimmte Stelle weitergegeben werden.

Sie können jedoch keine Feldkopien weitergeben, sondern nur Verweise auf deren Anbeginn. Der Funktionsbaustein empfängt eine Abschrift der Speicher-Adresse des Feldbeginns. Durch den Empfang eines Zeigers kann die Prüffunktion die Elemente des Felds ablesen und übersteuern. In den meisten Fällen wird auch der Feldindex an die entsprechende Stelle mitgereicht. Der Grund dafür ist, dass die Feldgrösse innerhalb der Funktionen nicht mehr bestimmt werden kann, da das Funktionsfeld kein Funktionsfeld mehr ist, sondern ein Konstantenzeiger.

Die Deklaration der Funktionen gibt an, dass die Funktionen ein ganzzahliges Halbbild des Feldtyps Ganzzahl als Argument erwarten. Daher wird der Indikator als eigener Wert mitgegeben. Für mehrdimensionale Felder müssen die zu erwartenden Indices aller Größen außer der ersten in der Deklaration der Funktionen spezifiziert werden.

Leave a Reply

Your email address will not be published.

Ja, auch diese Webseite verwendet Cookies. Hier erfahrt ihr alles zum Datenschutz