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 100 Elemente eines Arrays mit den Werten 0 bis
    99
    belegt werden.
    
    int Liste [100];
      
    int i;
      for (i=0;
        i<100; i++)
         
Liste[i]
=
        i;
      
    
    Hätte man anstelle des Arrays 100 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 Platz 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 irgendwelche anderen Variablen
    überschreibt.
    Aus diesem Grunde muss man das tunlichst vermeiden!
    
    Der RAM der PIC18-Microcontroller ist in Bänken von 256 Byte
    organisiert. Ein Array muss immer vollständig innerhalb einer
    Bank liegen. Das begrenzt die Größe von Arrays für
    diese PICs leider.
    
    
    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: 23.10.2012