C- Kurs 07 Höhere Datentypen

Ähnliche Dokumente
C-Propädeutikum Höhere Datentypen

2. Programmierung in C

Felder (1) Allgemeines

Inhalt. Peter Sobe 63. Felder in C

+ C - Array (Vektoren, Felder)

Modellierung und Programmierung 1

C- Kurs 04 Anweisungen

Einführung in die Programmierung

Übungspaket 23 Mehrdimensionale Arrays

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

RO-Tutorien 3 / 6 / 12

Dr. Monika Meiler. Inhalt

Advanced Programming in C

Zeiger, Arrays und Strings in C und C++

GI Vektoren

Zusammengesetzte Datentypen -- Arrays und Strukturen

Programmierung mit C Zeiger

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Zusammenfassung des Handzettels für Programmieren in C

Grundlagen C und C++ Einheit 02: Grundlagen in C. Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Datenfelder (Arrays) Vektoren, Matrizen, Tabellen. Dr. Beatrice Amrhein

Die Programmiersprache C Eine Einführung

Zeiger: Der Adressoperator &

Datentypen: Enum, Array, Struct, Union

Dr. Monika Meiler. Inhalt

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

C für Java-Programmierer

Kapitel 4: Zeiger. Inhalt. Zeiger Zeigerarithmetik

Elementare Datentypen in C++

Algorithmen und Datenstrukturen

Repetitorium Informatik (Java)

Mehr zu Datentypen: Felder, Zeiger und Strukturen

Algorithmen & Datenstrukturen

2. Datentypen und Deklarationen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Benutzerdefinierte und zusammengesetzte Datentypen

C-Deklarationen lesen und schreiben

Einführung in die Programmiersprache C

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

C kompakt für Java-Programmierer

Tutorium Rechnerorganisation

C/C++ Programmierung

Kapitel 7. Zusammengesetzte Datentypen, Vektoren, Zeichenketten

Kurzeinführung in C. Johannes J. Schneider

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Deklarationen in C. Prof. Dr. Margarita Esponda

JAVA-Datentypen und deren Wertebereich

Grundlagen der Informatik Enums, Strings und Arrays

Erste Schritte der Programmierung in C

Programmieren in C++ Arrays, Strings und Zeigerarithmetik

Moderne C-Programmierung

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Assembler - Adressierungsarten

C-PROGRAMMIERUNG - STRUKTUREN. Marcel Lebek

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

Unterprogramme, Pointer und die Übergabe von Arrays

2. Semester, 2. Prüfung, Lösung

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

VisualBasic - Variablen

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in die Programmierung Wintersemester 2011/12

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Modul 122 VBA Scribt.docx

Kurzeinführung in C++

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Praxis der Programmierung

Dynamischer Speicher

Kapitel 6. Programmierkurs. 6.0 Felder (Arrays) Deklaration von Feldern. Felder (Arrays) Mehrdimensionale Arrays. Birgit Engels, Anna Schulze WS 07/08

Kurze Einführung in die Programmiersprache C++ und in Root

Einführung in die Programmierung

2. Programmierung in C

Excel VBA Arrays, Enumeration und benutzerdefinierte Typen

AuD-Tafelübung T-B5b

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Inhalt. 4.7 Funktionen

Die Programmiersprache C99: Zusammenfassung

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Ein erstes Java-Programm

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

3. Einführung in C Programmierung Einführung in C Programmierung

Einheit Lexikalische Grundlagen der Programmiersprache C Lexikalische Einheiten

Grundlagen der Programmiersprache C++

Algorithmen und Programmierung II

Kapitel 3: Variablen

Einführung in die C-Programmierung

Der Datentyp String. Stringvariable und -vergleiche

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

Programmieren in C. Eigene Datentypen per typedef und Strukturen. Prof. Dr. Nikolaus Wulff

Informationsverarbeitung im Bauwesen

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

6. Bearbeitung von Strings in C Bearbeitung von Strings in C

"Einführung in die Programmierung" Krefeld, den 24. September 2013

Transkript:

C- Kurs 07 Höhere Datentypen Dipl.- Inf. Jörn Hoffmann jhoffmann@informa?k.uni- leipzig.de Universität Leipzig Ins?tut für Informa?k Technische Informa?k

Höhere Datentypen Überblick Höhere Datentypen Werden Mithilfe von primitiven Datentypen definiert Unterscheidung: Statische vs. dynamische Anlegung Strukturierte Datentypen Inhalt 1. Felder int i[10] 2. Strukturen struct, union 3. Aufzählung enum {schwarz, weiß} 4. Pointer int *i; Jörn Hoffmann C-Kurs Folie 2

Felder Institut für Informatik Felder engl. Array Zusammenfassung von gleichartigen Elementen eines Typs Belegen aufeinander folgende Speicherplätze Ansprechen über ein oder mehrere Indizes Eindimensionale Felder (Vektoren) Mehrdimensionale Felder (Matrizen) Nutzen Zusammenfassung gleicher Typen Zeichenketten Jörn Hoffmann C-Kurs Folie 3

Eindimensionale Felder Institut für Informatik Syntax Deklaration : Typ Feldname[Anzahl_n]; Ansprechen : Feldname[Index_i] Semantik Deklaration: Reservierung von Speicherplätzen für eine Folge von n- Elementen eines Typs Ansprechen: Auswahl des i-ten Element zwischen [0..n-1] Feld startet mit Index 0 Feld mit n Elementen endet beim Index n-1 Feldname ist symbolsicher Bezeichner der Anfangsadresse E (0) E (2)... E (n-1) sizeof(typ) Anfangsadresse (Name) Letzter Index Jörn Hoffmann C-Kurs Folie 4

Eindimensionale Felder Beispiel Beispiel // felder.c int index, ungeradezahlen[10]; // Typische Art ein Feld mittels For-Schleife zu durchlaufen for (index=0; index < 10; index++) ungeradezahlen[index] = 2*index + 1; // Ausgabe des Feldes for (i=0; i < 10; i++) printf( Index %d = %d\n, i, feld[i]); Jörn Hoffmann C-Kurs Folie 5

Eindimensionale Felder Initialisierung Initialisierung Zuweisung von Anfangswerten bei der Definition Spätere Zuweisungen müssen manuell erfolgen // Konkrete Angabe der Elementanzahl und Initialisierung int werte[4] = {2, 3, 4, 5}; // Implizite Angabe der Elementanzahl durch sofortige Initialisierung float messdaten[] = {32.6, 25.4, 10.8, 8.2}; // Unvollständige Initialisierung, restlichen Elemente haben Wert 0 double kontostand[3] = {100}; Jörn Hoffmann C-Kurs Folie 6

Eindimensionale Felder Speicheradressierung Speicheradressierung Felder sind Speicherplatzadressen in C Feldname ist Synonym für Startadresse des Speicherbereichs Elemente liegen sizeof(typ) Byte auseinander Ein Element belegt sizeof(typ) Byte Feld mit n Elementen belegt n*sizeof(type) Byte Ermittlung der Speicherstelle mittels Adressoperator & Jörn Hoffmann C-Kurs Folie 7

Eindimensionale Felder Speicheradressierung Beispiel // felder2.c #include <stdio.h> int main() { int i, a[4] = {10, 11, 12, 13}; // Ausgabe der Speicheradressen des Arrays a for (i=0; i < 5; i++) printf("&a[%d]=%d\n", i, (int)&a[i]); return 0; } Ausgabe:&a[0]=..528 // Potentiell unterschiedlich &a[1]=..532 &a[2]=..536 &a[3]=..540 Jörn Hoffmann C-Kurs Folie 8

Mehrdimensionale Felder Institut für Informatik Syntax Deklaration : Typ Feldname[Anzahl_m][Anzahl_n][..]; Ansprechen : Feldname[Index_i][Index_j][..] Semantik Zwei und mehrdimensionale Felder möglich Deklaration: Reservierung von Speicherplatz für eine Folge von n*m Elementen eines Typs Auswahl des i,j-ten Elements zwischen [0..m-1][0..n] Feld startet mit Index [0][0] Feld mit (n*m)-elementen endet beim Index [m-1][n-1] Feldname ist symbolsicher Bezeichner der Anfangsadresse Jörn Hoffmann C-Kurs Folie 9

Mehrdimensionale Felder Beispiel Beispiel int i, j, matrix[3][4]; matrix[0][0] = 1; matrix[2][0] = 9; matrix[2][3] = 12; // Ausgabe des Feldes for (i=0; i < 3; i++) for (j=0; j < 4; i++) // Erstes Element // Erstes Element, der letzten Zeile // Letztes Element printf( [%d][%d] = %d\n, i, j, matrix[i][j]); Jörn Hoffmann C-Kurs Folie 10

Mehrdimensionale Felder Initialisierung Initialisierung Zuweisung von Anfangswerten bei der Definition Spätere Zuweisungen müssen manuell erfolgen // Konkrete Angabe der Speicherplätze und Initialisierung int werte[3][4] = {{00, 01, 02, 03}, {10, 11, 12, 13}, {20, 21, 22, 23}}; // Implizite Angabe der Speicherplätze durch sofortige Initialisierung // Letzte Feldgröße muss bekannt sein float messdaten[][2] = {{32.6, 25.4}, {10.8, 8.2}, {20.1}{15.0}}; // Unvollständige Initialisierung, restlichen Elemente haben Wert 0 double matrix[3][3] = {{100, 65}, {1}}; Jörn Hoffmann C-Kurs Folie 11

Eindimensionale Felder Speicheradressierung Speicheradressierung Wie bei eindimensionalen Feldern Adressberechnung für Stelle (i,j) im int array[m][n] i*m*sizeof(int) + j*sizeof(int) Ermittlung der Speicheradresse mittels &-Adressoperator Jörn Hoffmann C-Kurs Folie 12

Eindimensionale Felder Speicheradressierung // matrix.c #include <stdio.h> #define M 3 #define N 4 int main() { int i, j, matrix[m][n]; // Ausgabe aller Speicheradressen der Matrix-Komponenten for (i=0; i < M; i++) { for (j=0; j < N; j++) printf("&a[%d][%d] =..%.3d\n", i, j, (int)&matrix[i][j] % 1000); printf("\n"); } return 0; } Ausgabe: // Potentiell unterschiedlich &a[0][0]=..72 &a[0][1]=..76 &a[0][2]=..80 &a[1][0]=..84 &a[1][1]=..88 &a[1][2]=..92 Folie 13

Strukturen Institut für Informatik Strukturen Zusammenfassung verschiedener Komponenten zu einer Einheit Komponenten können unterschiedliche Datentypen haben Nutzen Abspeicherung zusammengehöriger Daten Modellierung von Objekten Jörn Hoffmann C-Kurs Folie 14

Strukturen Einfache Strukturen Syntax Deklaration: struct Strukturname { Typ1 Variablenname1;.. Typ_n Variablenname_n; } [Variablename]; Definition : struct Strukturname Strukturvariable; Ansprechen : Strukturvariable.Variablenname_i Semantik Deklaration : Bekanntmachung einer Struktur mit n Komponenten Definition : Speicherreservierung für zuvor deklarierte Struktur Ansprechen : Auswahl einer Komponenten Jörn Hoffmann C-Kurs Folie 15

Strukturen Einfache Strukturen Beispiel struct mitarbeiter { }; char name[50]; // Nachname float gehalt; // Jahresgehalt in int parkplatz; struct Mitarbeiter a, b; // 0=nein, 1=ja // Zwei einzelne Mitarbeiter struct Mitarbeiter team[10]; // Feld mit 10 Mitarbeitern Jörn Hoffmann C-Kurs Folie 16

Strukturen Einfache Strukturen Initialisierung struct mitarbeiter { }; char name[50]; // Nachname float gehalt; // Jahresgehalt in int parkplatz; // Vollständig // 0=nein, 1=ja struct Mitarbeiter a = { Mustermann, 42000, 1}; // Unvollständig mittels Punktoperator struct Mitarbeiter m = {.name= Mustermann,.parkplatz=1}; Jörn Hoffmann C-Kurs Folie 17

Typdefinitionen Institut für Informatik Typdefinition von Strukturen Strukturen werden oft als neuer Typ definiert Einspart Tipparbeit, da struct entfällt Typdefinition kann bereits bei Deklaration erfolgen Syntax typedef Typ Alias; Beispiele typedef struct mitarbeiter mitarbeiter_t; typedef struct _student // Bezeichner irrelevant, kann entfallen { long matrikel; char *name; // Speicher muss später dynamisch allokiert werden } student_t; Jörn Hoffmann C-Kurs Folie 18

Strukturen Einfache Strukturen Beispiel // mitarbeiter.c typedef struct { char name[strlen]; float gehalt; int parkplatz; } mitarbeiter_t; mitarbeiter_t a = {"Mustermann", 42000, 1}; mitarbeiter_t mitarbeiter_t b = {.name = "Mustermann",.parkplatz=1}; team[10] = {a, b}; Jörn Hoffmann C-Kurs Folie 19

Strukturen Variante Strukturen Variante Strukturen Zugriff auf Struktur über mehrere Varianten Einfache Struktur : Speicher liegt hintereinander Variante Struktur : Speicher liegt übereinander Selber Platz wird für verschiedenartige Datentypen genutzt Komponenten beginnen mit selber Speicheradresse Komponenten enden mit unterschiedlicher Adresse Nutzen Generische Abspeicherung ähnlicher Datentypen Typkonventionen Jörn Hoffmann C-Kurs Folie 20

Strukturen Variante Strukturen Syntax Wie bei Strukturen union Strukturname { Typ1 Variable1;... Typ_n Variable_n; } [Variablenname]; Semantik Variable 1..n überdecken sich Jörn Hoffmann C-Kurs Folie 21

Strukturen Variante Strukturen Beispiel // Siehe auch endianness.c union U2 { int zahl; char byte[4]; short shrt; }; Zahl Byte[0] Byte[1] Byte[2] Byte[3] shrt Jörn Hoffmann C-Kurs Folie 22

Aufzählungen Institut für Informatik Aufzählungen (enum) Aufzählungstyp (keine Struktur) Zur Deklaration von Konstanten Abspeicherung als Integer-Wert Nutzen Aufzählung Benennung von Fällen zur Fallunterscheidung Definition von semantisch ähnlichen Konstanten {true, false} Jörn Hoffmann C-Kurs Folie 23

Aufzählungen Institut für Informatik Syntax enum Typname { }; Konstante_1 [= Wert], Konstante_2 [= Wert],... Konstante_n [= Wert]; Semantik Festlegung von definierten Konstanten Automatische Wertbelegung durch Hochzählung Werte beginnen bei 0 Nachfolger um eins erhöht Jörn Hoffmann C-Kurs Folie 24

Aufzählungen Institut für Informatik Beispiele // enum.c enum farbe {ROT, GRUEN, BLAU}; typedef enum { status_undef = 0, status_success, status_abort, status_error = 255 }status_t; status_t status = status_abort; Jörn Hoffmann C-Kurs Folie 25