C für PICs: Arrays und Strings
zurück
zu C für PICs
, C-Compiler , PIC-Prozessoren
,
Elektronik , Homepage
C
für PICs
Grundlagen
von C
Variablen
Funktionen
Operationen
Programmablaufsteuerung
Arrays
und
Strings
Pointer
Strukturierte Typen
PIC-spezifisches
zurück
zu C für PICs
Arrays
und Strings
Wir kennen bisher einfache Typen (char, int, float) die jeweils genau
einen Wert speichern können. Arrays und Strings speichern dagegen
viele Werte des
gleichen Typs.
Arrays
Ein Array ist eine Liste von Variablen des gleichen Typs. Deklariert
wird ein Array wie folgt
typ Array_Name
[Anzahl];
Dabei wird ein Array mit dem Namen "Array_Name" angelegt. Es
enthält mehrere Variablen vom Typ "typ". Die Anzahl dieser
Array-Elemente ist "Anzahl". In der Praxis kann das so aussehen:
int Liste [5];
Nun haben wir ein neues Array mit dem Namen "Liste". Es enthält 5
Elemente, jedes Element ist eine Variable vom Typ integer. Die Namen
der Elemente lauten Liste[0], Liste[1], Liste[2], Liste[3] und
Liste[4]. Um die Verwendung dieser Namen zu demonstrieren belege ich
ein Elemete des Arrays mit dem Werte 2.
Liste[2] = 2;
Man hätte natürlich auch einfach 5 normale integer-Variablen
deklarieren können, aber gerade die Namensgebung mit Hilfe
von Indexen eröffnet neue Möglichkeiten im Umgang mit einer
großen Variablenzahl. Als Index kann man nämlich auch
eine char- oder integer-Variable verwenden. Das zeigt folgendes
Beispiel, indem die 200 Elemente eines Arrays mit den Werten 0 bis 199
belegt werden.
int Liste [200];
int i;
for (i=0;
i<200; i++)
Liste[i]
= i;
Hätte man anstelle des Arrays 200 einzelne Variablen deklariert,
wäre das deutlich aufwendiger geworden.
In C werden die Elemente eines Arrays direkt hintereinander im Speicher
abgelegt. Mit Hilde des Indexes greift man also auf eine bestimmte
Speicheradresse zu, die der Compiler ausgehend vom Patz der ersten
Speicherzelle und dem Index errechnet. Wenn man versehentlich einen zu
großen Indexwert benutzt (z. B. versucht das sechste Element eine
Arrays zu verwenden, das nur 5 Elemente hat), dann bemerkt C den Fehler
nicht. Man greift auf Speicherzellen zu, die außerhalb des Arrays
liegen. Ein lesender Zugriff ergibt Unsinn, während ein
schreibender Zugriff irrgendwelche anderen Variablen überschreibt.
Aus diesem Grunde muss man das tunlichst vermeiden!
Ein Array wird zwar fast wie eine Variable deklariert, intern stellen
Arraynamen aber nur Pointer (Zeiger) auf den Anfang des Arrays im
Datenspeicher dar.Deshalb kann man nicht einfach ein Array einem
anderen
komplett zuweisen. Ein Kopieren muss elementweise erfolgen.
int a[100], b[100];
...
a =
b;
// FALSCH
char i;
for (i=0;
i<100; i++) a[i] = b[i]; // RICHTIG
mehrdimensionale
Arrays
Bisher habe ich nur sogenannte eindimensionale Arrays
beschrieben. Man kann aber auch mehrdimensionale Arrays deklarieren,
das sind Arrays, die als Elemente wieder Arrays enthalten. als Beispiel
dient hier ein zweidimensionales Array.
int m [10][10];
Das kann man als Array betrachten, das 10 Elemente hat. Jedes dieser
Elemente ist wiederum ein Array mit 10 Elementen und diese Elemente
sind integer-Zahlen. Das Array beinhaltet also 100 integer-Variablen.
Alternativ kann man sich das Array nun als Tabelle mit 10 Zeilen und 10
Spalten vorstellen. Jedes der 100 Felder der Tabelle ist eine
integer-Variable.
Die einzelnen integer-Variablen (also Array-Elemente) adressiert man
nun mit dem Arraynamen und zwei Indexen. Belegen wir mal ein Element
mit 5:
m[2][4] = 5;
Man kann auch mehr als zwei Dimensionen verwenden, allerdings
wächst dann der Speicherbedarf eines Arrays natürlich schnell
an. Gerade in kleinen PIC-Mirkocontrollern stößt man da
schnell an Grenzen.
Arrays
initialisieren
Arrays lassen sich schon bei der Deklaration mit Startwerten belegen.
Dazu hängt man der Deklaration eine in geschweifte Klammern
eingefasste
vollständige Liste von Initialisierungswerten der Arrayelemente an:
int Liste [5] =
{0,1,2,3,4};
int m [4][4]
= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
Strings
Strings sind eindimentionale char-Arrays. Sie dienen der Speicherung
von Text. Ich deklariere ein Array, das einen Text von maximal 30
char-Zeichen speichern kann:
char T[30];
Die Speicherung der einzelnen Zeichen in den 30 Elementen erfolgt im
ASCII-Format.
Nun kann man in so einem String auch Texte speichern, die kürzer
als 30 Zeichen sind. Damit C weiß, wo der Text im String endet,
wird das Array-Element, das auf das letzten gültigen Zeichen
folgt, mit dem Zahlenwert 0 beschrieben. Das ist nicht das druckbare
Zeichen "0", sondern ein Steuercode. Solch einen String bezeichnet man
nun als "nullterminiert". In C werden stets nullterminierte Strings
verwendet, es gibt dafür komfortable Funktionen. Da nun jeder
String mit 0 endet, benötigt man im String auch eine Extrastelle
für die abschließende 0. In den String passt nun also nur
noch ein 29-Zeichen langer Text.
-->
weiter zu Pointer
zurück
zu C für PICs
, C-Compiler , PIC-Prozessoren
,
Elektronik , Homepage
Autor: sprut
erstellt: 01.10.2007
letzte Änderung: 06.11.2009