Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Programmieren in C Grundlagen C 3
Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ
2
Felder 1 Ein Feld (array) ist die Zusammenfassung von Daten gleichen Typs in einer Variablen Felder haben eine oder auch mehrere Dimensionen (Vektoren, Matrizen, …) Definition von Feldern: char sbuf[128]; int arr[] = { 1, 8, 7, -1, 2 }; short mat[2][2] = { 11, 12, 21, 22}; Mit der Felddefinition wird der benötigte Speicherplatz für die Variable reserviert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
3
Felder 2 Zugriff auf Feldelemente mit Index in []: char c; c = sbuf[32]; sbuf[0] = 'A'; Die Feldindizierung beginnt immer mit 0! short s, mat[3][3]; s = mat[0][0]; Felder werden elementweise und Zeile für Zeile hintereinander abgespeichert Es gibt beim Zugriff keinerlei Überprüfungen auf Bereichsgrenzen von Feldern! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
4
Felder 3 Feldnamen sind eigentlich Pointer, zeigen auf das erste Element im Feld Felder werden mit Adresse an Funktionen übergeben (wie Pointer) Feldindizes sind eigentlich Offsets und geben den Abstand zum Feldanfang an Bsp: ia[3] *(&ia[0] + 3 * sizeof(int)) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
5
Felder und Zeiger 1 Felder reservieren bei der Definition den benötigten Speicherplatz Zeiger erhalten den Speicherplatz erst bei der Zuweisung des Objekts, auf das sie zeigen, oder bei dynamischer Speicherallokation Ähnlichkeit von Feldern und Zeigern mächtige Pointerarithmetik möglich Manchmal ein wenig unverständlich! Pointer essentiell bei Zeichenketten (strings) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
6
Felder und Zeiger 2 Beispiel
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
7
Felder und Zeiger 3 Vor Ablauf
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
8
Felder und Zeiger 4 Programmstart: Speicher für Feld reservieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
9
Felder und Zeiger 5 Programmstart: Speicher für Zeiger reservieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
10
Felder und Zeiger 6 Zeiger bufp Feld buf bzw. &buf[0]
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
11
Felder und Zeiger 7 Zeichen 'A' buf[0]
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
12
Felder und Zeiger 8 *bufp 'Y'
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
13
Felder und Zeiger 9 bufp inkrementieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
14
Felder und Zeiger 10 *bufp 'Z'
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
15
Felder und Zeiger 11 Danach
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
16
Zeichenketten 1 Zeichenketten (strings) sind eine Folge von Einzelzeichen char String ist terminiert mit '\0' Speicherbedarf: Länge + 1 Byte Beispiel: char *s; char *hallo = "Hallo, Welt!"; String Pointer auf Feld von Elementen vom Typ char Nullstring NULL (definiert in stdio.h) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
17
Zeichenketten 2 Beispiel: char buffer[128]; char *bp = buffer;
Stringpointer bp erstes Zeichen im Feld buffer Ähnlichkeit von Feldern und Pointern! Beispiel: String kopieren und ausgeben Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
18
Zeichenketten 3 Beispiel: String kopieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
19
Zeichenketten 4 Programmstart
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
20
Zeichenketten 5 Konstante in Speicher
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
21
Zeichenketten 6 Pointer s1 initialisieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
22
Zeichenketten 7 Speicher für s1 und t anlegen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
23
Zeichenketten 8 String s2 = t s2 = & t[0]
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
24
Zeichenketten 9 Schleife: zeichenweise kopieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
25
Zeichenketten 10 Zeichen kopieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
26
Zeichenketten 11 Pointer inkrementieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
27
Zeichenketten 12 … Zeichen kopieren Pointer inkrementieren
bis Ende des Strings erreicht *s1 == '\0' Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
28
Zeichenketten 13 End of String: *s1 == '\0'
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
29
Zeichenketten 14 String terminieren: *s2 = '\0'
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
30
Zeichenketten 15 Danach Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
31
Exkurs Kommandozeilenparameter 1
Bekannt: jedes C-Programm startet mit einer main-Funktion main-Funktion ist vom Typ int und hat drei Parameter: int argc Anzahl von Kommandozeilenparametern char *argv[] Feld von Strings Kommandozeilenparameter char *envv[] Feld von Strings Umgebungsparameter Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
32
Exkurs Kommandozeilenparameter 2
Beispiel echo1.c /* echo1.c */ #include <stdio.h> int main(int argc, char **argv) { while(--argc) printf("%s ", *++argv); putchar('\n'); return(0); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
33
Exkurs Kommandozeilenparameter 3
Beispiel: echo2.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
34
Aufzählungsdatentyp 1 Aufzählungsdatentyp enum
Für Datentypen mit diskreten konstanten Werten Beispiel: enum color { rot, gruen, blau } c; enum boolean { FALSE, TRUE } b; b = FALSE; c = blau; Darstellung als int beginnend mit 0, wenn nicht explizit angegeben: enum boolean { TRUE=1, FALSE=0 } b; b = TRUE; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
35
Aufzählungsdatentyp 2 Beispiel: enumdemo.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
36
Zusammengesetzte Datentypen 1
Zusammenfassung von zusammgehörigen Daten in eigenen Datentyp struct Beispiel einfaches EA-Gerät mit 8-Bit Steuerregister cr und 16-Bit Datenregister dr: struct { char cr; int dr; } ea1; struct _ea { char cr; int dr; } ea2; Zugriff durch Selektor . if(ea1.cr & 0x01) ea2.dr = 4711; Bei Pointern durch Selektor -> if(ea1->cr & 0x01) ea2->dr = 4711; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
37
Zusammengesetzte Datentypen 2
Beispiel: Datentyp struct circle für Objekt Kreis in einem Zeichenprogramm notwendig Mittelpunkt (x,y) und Radius r /* Kreis: Typ */ struct circle { int x; /* Mittelpunktkoordinate x */ int y; /* Mittelpunktkoordinate y */ int r; /* Radius */ }; struct circle c; c.x = 100; c.y = 100; c.r = 50; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
38
Zusammengesetzte Datentypen 3
Funktionen für struct circle /* Kreis bewegen: Mittelpunkt veraendern */ void move_circle(struct circle *c, int x, int y) { c->x = x; c->y = y; } /* Kreisgroesse aendern: Radius veraendern */ void resize_circle(struct circle *c, int r) { c->r = r; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
39
Zusammengesetzte Datentypen 4
Beispiel: mydraw1.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
40
Exkurs Computergrafik 1
Zwei Typen von Computergrafik: Pixelgrafik Grafik wird pixelweise aufgebaut Formate: gif, jpg, png, bmp, … Probleme bei Skalierung Vektorgrafik Grafik besteht aus Objekten mit den nötigen Eigenschaften, z.B. Linie: (x1,y1) und (x2,y2) oder Kreis: Mittelpunkt (x,y) und Radius r Problemlos skalierbar Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
41
Exkurs Computergrafik 2
Beispiel Pixelgrafik, GIF-Format Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
42
Exkurs Computergrafik 3
Beispiel: Vektorgrafik, SVG-Format Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
43
Exkurs Computergrafik 4
SVG – Scalable Vector Graphics Wikipedia Veröffentlicht vom W3C erstmals 09/2001 vergleichbar Flash Animationen und Präsentationen möglich XML-Format im Browser eingebaut (Opera, Firefox, u.v.a., Internet Explorer ab Version 9!) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
44
Typdefinitionen 1 Oft sinnvoll, eigene Typen oder Untertypen zu definieren typedef Beispiel: typedef unsigned char byte; Beispiel: typedef struct _ea { byte cr; int dr; } ea; ea ea1, ea2; Problem: Typprüfung bei C eher ungenau! besser lesbar, bessere Dokumentation! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
45
Typdefinitionen 2 Erweiterung von mydraw: mydraw2.c typedef enum { /* Farben */ white, black, grey, red, green, blue, yellow, cyan, magenta } color; typedef struct _circle { /* Kreis */ int x; /* Mittelpunktkoordinate x */ int y; /* Mittelpunktkoordinate y */ int r; /* Radius */ color c; /* Farbe */ } circle; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
46
Typdefinitionen 3 Beispiel: mydraw2.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
47
Typdefinitionen 4 Erweiterung Linien, Rechtecke: mydraw3.c typedef struct _line { /* Linie */ int x1, y1; /* Eckpunkt 1 x,y */ int x2, y2; /* Eckpunkt 2 x,y */ color c; /* Farbe */ } line; typedef struct _rect { /* Rechteck */ int x, y; /* Linke obere Ecke x,y */ int w; /* Breite */ int h; /* Hoehe */ color c; /* Farbe */ } rect; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
48
Typdefinitionen 5 Beispiel: mydraw3.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.