Seitenleiste

Wiki

Community

Datentypen

Zählbare

Fließkomma

Datenstrukturen

Attribute

Speicherklassen

Typqualifizierer

Arrays

Erste Frage: Was ist das? Ein Array sind Daten eines bestimmten Datentyps, zum Beispiel char. In einem char kann immer ein Buchstabe aufbewahrt werden. Will man mehrere hintereinander setzen, benutzt man dazu ein Array.

"HALLO"

ist also ein Array, bestehend aus 6 chars. Sechs, weil am Schluss immer noch das Nullbyte folgt. Das Nullbyte setzt der Compiler automatisch. So lässt sich leicht zählen, wie viele Buchstaben in dem Array sind. Man zählt einfach durch, bis man das Nullbyte gefunden hat.

Wie definiere ich ein Array?

Nun, gewissermaßen haben wir schon indirekt mit Arrays gearbeitet, indem wir einen String folgendermaßen deklariert haben:

char const * MyString="Hallo Welt";

Aber das ist eine spezielle Notation zum deklarieren eines Arrays aus chars. Ein allgemeines Array, würde folgendermaßen definiert:

char MyArray[11]="Hallo Welt";

Wir haben 10 Buchstaben und ein Nullbyte. Daher hat das Array 11 Elemente vom Datentyp char. Stellt sich nun die Frage, warum sollte man ein Array brauchen. Mit dem String ging das viel einfacher; da muss man schließlich keine Buchstaben abzählen. Klar, C ist die Sprache der faulen Leute. Man schreibt also einfach

char MyArray[]="Hallo Welt";

Der C-Compiler weiß also durch die Klammern '[' und ']', dass der Programmierer ein Array machen möchte. Dadurch, dass keine Zahl in den Klammern steht, muss der Compiler eben selber zählen. Die Zahl muss man also nur schreiben, wenn das Array größer sein soll, als der vordefinierte Inhalt.

Wie greife ich auf ein Array zu?

Ganz einfach: Man benutzt die Klammern auch mit der Variable:

MyArray[2] = 'h';

Das erste 'l' in „Hallo Welt“ wird durch ein 'h' ersetzt. Das 'l' muss in den einfachen (nicht doppelten) Anführungszeichen stehen, damit der Compiler weiß, dass Sie sich nicht verschrieben haben. Und schon kommt die nächste Frage auf:

Warum die 2 in den Klammern, wo das 'l' doch der dritte Buchstabe ist? Ganz einfach: Die Zählweise beginnt bei 0. Um das 'H' anzusprechen, muss man also zum Beispiel

MyArray[0] = 'F';

schreiben.

Wer das letzte Kapitel gelesen hat, weiß eventuell noch die Bedienung der Prozedur printf(). Mit %s gibt man einen String aus, mit %d eine Zahl. Wie gibt man aber einen einzelnen Buchstaben aus? Mit

MyArray[5]

schaut man ja nicht auf einen String (char *), sondern auf einen einzelnen Buchstaben (char) inmitten eines Arrays. Dazu gibt es %c. Und so sieht die Story dann komplett aus:

int main() 
{ 
  char MyArray[] = "Hallo Welt"; 
 
  printf("Der 3. Buchstabe ist %c.\n", MyArray[2]); 
 
  MyArray[2]= 'h'; 
  printf("Der 3. Buchstabe ist %c.\n", MyArray[2]);
 
  return 0;
}

Arrays gibt es natürlich nicht nur mit char. Nur bei char ist es am leichtesten, sie vorzudefinieren. Die allgemeingültige Art wäre eigentlich:

char MyArray[] = {'H', 'a', 'l', 'l', 'o', ' ', 'W', 'e', 'l', 't', 0};

Ziemlich aufwendig, schon ganz gut, dass man sich das dank der doppelten Anführungszeichen („) in diesem Falle sparen kann. Anders jedoch bei Zahlen:

long ZahlenArray[]={ 4711, 0815, 2235, 42474, 692418, 692664 };

Auch diese Zahlen kann man schließlich mit printf ausgeben:

int main()
{ 
  long ZahlenArray[]={ 4711, 0815, 2235, 42474, 692418, 692664 }; 
 
  printf("Zahl 1: %d\n", Zahlen[0]); 
  printf("Die Nummer der MoonstoneBBS lautete: +49(0)%d als Vorwahl\n" 
         "und als Anschluss wurde %d gewählt\n\n", Zahlen[2], Zahlen[5]);
  return 0;
}

Spielen wir das ganze noch mal mit noch einem anderen Datentyp durch: den Strings:

int main()
{ 
  long Sprache; 
  char *Hallo[]      ={ "Hello",    "Hallo",           "Salut"     }, 
       *und[]        ={ "and",      "und",             "et"        }, 
       *Wiedersehen[]={ "good bye", "auf Wiedersehen", "au revoir" }; 
 
  Sprache = 1; 
 
  printf("%s %s %s!\n", Hallo[Sprache], und[Sprache], Wiedersehen[Sprache]);
 
  return 0;
}

Was ist eigentlich ein Array aus chars?

Es sind nur hintereinander gesetzte Buchstaben (bzw. Zahlen von 0-255). Hintereinander gesetzte Buchstaben heißen ja auch String. Also sollte es doch auch eine Möglichkeit geben, sie mittels printf und der %s Formatierung in der Shell auszugeben. Das passiert, indem man vor den ersten auszugebenden Buchstaben im Array ein Und-Zeichen (&) setzt. Der &-Operator heißt „Adresse von“ und printf gibt mit %s alle Buchstaben ab der angegeben Adresse.

int main() 
{ 
  char MyArray[] = "Hallo Welt"; 
 
  printf( "Das Array: %s\n", &MyArray[0] );
 
  printf( "Der 3. Buchstabe ist %c.\n", MyArray[2] ); 
 
  MyArray[2]= 'h'; 
 
  printf( "Der 3. Buchstabe ist %c.\n", MyArray[2] ); 
 
  printf( "Was kommt nach Hallo? -> %s\n", &MyArray[6] );
 
  return 0;
}

Wird der '&'-Operator vor eine Variable gesetzt und es steht keine andere Variable davor, so hat er nicht die Funktion des binären UND. Hier konvertiert er den Buchstaben Array[6] (char) in einen String (char *), dem weitere Buchstaben folgen, bis das Nullbyte folgt.

Will man das ganze Array ausgeben, kann man sich das '&' sparen:

printf( "Das Array: %s", MyArray );

MyArray ist die Adresse des 1. Buchstabens und nichts anderes sagt auch &MyAddress[0] aus.

Eine Aneinanderreihung von Buchstaben (char []) ist ja zufälligerweise nichts anderes als ein String (char *).