Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

EDV1 - Komplexe Datentypen

Ähnliche Präsentationen


Präsentation zum Thema: "EDV1 - Komplexe Datentypen"—  Präsentation transkript:

1 EDV1 - Komplexe Datentypen

2 EDV1 - Komplexe Datentypen
Aus primitiven Datentypen lassen sich komplexe Datentypen zusammensetzen. Aufzählung (enum) Struktur (struct) Union (union) Für Datentypen können neue Namen definiert werden (typedef). EDV1 - Komplexe Datentypen

3 EDV1 - Komplexe Datentypen
Aufzählungstypen Allgemeine Definition: enum [typname] [{name1[=wert1],...,nameN[=wertN]}] [var1[=val1]],...,[varM[=valM]] ; Es wird der Aufzählungstyp typname definiert. Variablen dieses Typs können die Werte name1, name2,..., nameN annehmen. Jeder Wert name1,...,nameN entspricht einer ganzen Zahl, der als wert1,...,wertN angegeben werden kann. Wird wert1 nicht angegeben, der Wert 0 benutzt. Wird ein anderer Wert nicht angegeben, wird der vorhergehende Wert + 1 benutzt. Die Variablen var1,...,varM werden definiert ggf. und mit den Werten val1,...,valM initialisiert. Weitere Variablen des gleichen Typs werden dann definiert durch: enum typname var1[=val1],...,varM[=valM] ; EDV1 - Komplexe Datentypen

4 EDV1 - Komplexe Datentypen
Typdefinition und Variabelendefinition können getrennt werden: enum typname {name1[=wert1],...,nameN[=wertN]} ; enum typname var1[=val1],...,varM[=valM] ; Beispiel: enum farben {rot, gruen, blau, weiss, schwarz} fg=schwarz, bg=weiss; enum colors {red, rot=red, gruen, green=gruen, blau, blue=blau}; Vorteile: Texte können selbsterklärend sein. Variablen können nur eingeschränkte Werte annehmen. Enum-Variablen werden automatisch nach int konvertiert, können also auch als Feldindex verwendet werden. int index[10]; index[weiss]=22; index[rot]=123; EDV1 - Komplexe Datentypen

5 EDV1 - Komplexe Datentypen
Strukturen Allgemeine Definition: struct [typname] {typ1 elem1; typ2 elem2;...;typN elemN;} [var1[={val11,...,val1N}]],..., [varM[={valM1,...,valMN}]]; Es wird eine Struktur mit dem Namen typname definiert. Diese besteht aus den Komponenten elem1,...,elemN , die vom Typ typ1,...,typN sind. Es werden die Variablen var1,...,varM vom Typ typname erzeugt und mit den Werten vali1,...,valiN initialisiert. Die Komponenten der Struktur können nicht mit Standardwerten belegt werden. Zugriff auf die Komponenten: vari.elemj Definition der Struktur und der Variablen kann getrennte werden: struct typname {typ1 elem1; typ2 elem2;...;typN elemN;} ; struct typname var1[={val11,...,val1N}],..., varM[={valM1,...,valMN}]; EDV1 - Komplexe Datentypen

6 EDV1 - Komplexe Datentypen
Beispiel enum geschlechter {weiblich, maennlich}; struct person { char vorname[20]; char nachname[40]; char anrede[10]; unsigned int alter; geschlechter geschlecht; char land[40]; char ort[20]; unsigned int plz; char strasse[50]; }; struct person mueller={"Egon","Mueller","Herr", 99,maennlich,"Deutschland","Berlin",1000, "Unbekannte Str. 123"}; EDV1 - Komplexe Datentypen

7 EDV1 - Komplexe Datentypen
printf( "Name : %s %s %s\n" "Alter : %u\n" "geschlecht : %s\n" "Adresse:\n%s\n%u %s\n%s\n", mueller.anrede, mueller.vorname, mueller.nachname, mueller.alter, (mueller.geschlecht==weiblich?"weiblich":"maennlich"), mueller.strasse, mueller.plz, mueller.ort, mueller.land); EDV1 - Komplexe Datentypen

8 Schachtelung von Strukturen
Die Definitionen von Strukturen können geschachtelt werden. Z.B.: enum geschlechter {weiblich, maennlich}; struct name { char vorname[20]; char nachname[40]; char anrede[10]; }; struct adresse { char land[40]; char ort[20]; unsigned int plz; char strasse[50]; }; struct person { struct name cname; unsigned int alter; geschlechter geschlecht; struct adresse addr; }; EDV1 - Komplexe Datentypen

9 EDV1 - Komplexe Datentypen
struct person mueller={"Egon","Mueller","Herr", 99,maennlich,"Deutschland","Berlin",1000, "Unbekannte Str. 123"}; printf( "Name : %s %s %s\n" "Alter : %u\n" "geschlecht : %s\n" "Adresse:\n%s\n%u %s\n%s\n", mueller.cname.anrede, mueller.cname.vorname, mueller.cname.nachname,mueller.cname.alter, (mueller.geschlecht==weiblich?"weiblich":"maennlich"), mueller.addr.strasse, mueller.addr.plz, mueller.addr.ort, mueller.addr.land); EDV1 - Komplexe Datentypen

10 EDV1 - Komplexe Datentypen
Analogie zu JAVA public class typname { typ1 elem1; ... typN elemN; typname(){super()}; typname(typ1 elem1,...,typN elemN) { this.elem1=elem1; this.elemN=elemN; } typname var1=new typname(val11,...,val1N); typname varM=new typname(valM1,...,valMN); EDV1 - Komplexe Datentypen

11 Pointer und Strukturen
Wir definieren einen pointer auf eine Struktur: struct typname *zeiger; Zugriff auf die i-te Komponente der Struktur: (*zeiger).elemi Äquivalent kann geschrieben werden: zeiger->elemi Strukturen eignen sich sehr gut zur Programmierung von Listen. Um Listen programmieren zu können, muss man die Listenelement miteinander verketten, d.h. jedes Listenelement muss einen Zeiger auf das nächste Listenelement enthalten: struct listenelement { struct listenelement *next; struct listenelement *prev; ... }; Daher dürfen in der Definition der Struktur Zeiger auf den noch nicht fertig definierten Strukturtyp verwendet werden. EDV1 - Komplexe Datentypen

12 EDV1 - Komplexe Datentypen
Unions Unions werden genauso definiert wie Strukturen. Im Unterschied zu Strukturen liegen alle Elemente auf dem selben Platz im Speicher, d.h. der selbe Speicherbereichkann unterschiedlich interpretiert werden. Allgemeine Definition: union [typname] {typ1 elem1; typ2 elem2;...;typN elemN;} [var1[={val1}]],...,varM[={valM}]]; Der Initialisierungswert wird immer dem ersten Element zugewiesen. Verwendung z.B.: Ein Speicherbereich soll unterschiedlich interpretiert werden, z.B. um bei einer Variablen auf die interne Darstellung zugreifen zu können. In einer Struktur soll die Interpretation bestimmter Felder vom Inhalt anderer Felder abhängen. EDV1 - Komplexe Datentypen

13 Definition neuer Typen
Mit Hilfe der typedef-Anweisung können neue Variabelentypen definiert werden. typedef alttyp neutyp; Nach der Definition eines Typs kann dieser genau so benutzt werden, wie die vordefinierten Typen. Beispiel: typedef long int longint; longint i, j; struct person { ... }; typdef struct person persontyp; persontyp mueller = {...}; EDV1 - Komplexe Datentypen


Herunterladen ppt "EDV1 - Komplexe Datentypen"

Ähnliche Präsentationen


Google-Anzeigen