Teilnehmen: ssh ckurs@217.197.81.33 Heutiges Thema: Arrays und Strukturen ===================================== Arrays deklarieren mit eckigen Klammern: int summanden[100]; Seit C99 (1999) gehen auch Arrays, deren Länge erst zur Laufzeit bekannt ist (Variable Length Arrays). Microsoft kanns nicht! int n = 100; int summanden[n]; Zugriff auf das Array mit eckigen Klammern, Elemente beginnen bei 0: summanden[10] = ...; Strukturen ========== Deklaration: struct strukturname { type1 feldname1; type2 feldname2, feldname3; } strukturvariable; Zugriff auf Felder: variable.feld1; Beispiel: struct konfigurationen { int anzahl; struct ini_eintrag eintraege[100]; } konfigs[10]; konfigs[4].eintraege[10].schluessel Unions ====== Statt struct einfach union schreiben: union wert { int zahl; double gleitkomma; char text[100]; }; Unions sind wie structs, aber alle Felder werden an der gleichen Stelle gespeichert! Spart Platz, aber es kann immer nur ein Feld gespeichert werden. Es ist oft nützlich, zusätzlich zu speichern, was sich in einer Union gerade befindet (tagged union). Type Punning ------------ Motivation: Das Bytemuster einer Gleitkommazahl auslesen. union doublechar { double d; unsigned char c[8]; }; Erst d schreiben, dann c auslesen: wie ist d repräsentiert? Und umgekehrt! Hausaufgaben ------------ * Implementiere das Sieb des Eratosthenes um die ersten n Primzahlen zu erzeugen. * Schreibe ein kleines Programm, mit dem in einer ini-Datei nach dem Wert zu einem gegeben Schlüssel suchen kann. Benutze strcmp() um Schlüssel zu vergleichen. $ inisuche schluessel . strcmp(x, y) gibt 0 zurück, wenn x und y gleiche Strings sind, etwas negative wenn x < y, sonst etwas positives. Nächster Kurstermin: 10. Februar "Dateien, Ein- und Ausgabe"