Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring SS 2004.

Ähnliche Präsentationen


Präsentation zum Thema: "Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring SS 2004."—  Präsentation transkript:

1 Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring SS 2004

2 Seminar: "Einführung in C/C++"2 Typen – welche kennen wir schon? 1.Einfache Typen: char, int, float, double, void,... 2.Pointer: char *, int * *, void *, Arrays: int [ ], float [ ] [ ],...

3 Seminar: "Einführung in C/C++"3 typedef Mit typedef kann man Typbeschreibungen Namen geben: typedef int * IntPtr; IntPtr x; x ist nun vom Typ int * typedef char (* T)[10]; T y;

4 Seminar: "Einführung in C/C++"4 Aufzählungstypen (enums) Definiere neuen Typ durch Aufzählung der Werte, die eine Variable dieses Typs einnehmen kann: enum Farbe { blau, rot, gelb, orange, gruen }; Farbe x = gelb; std::cout << gruen;

5 Seminar: "Einführung in C/C++"5 enum-Werte sind Zahlen Die Werte eines enums werden bei der Definition zu Synonymen von (ganzen) Zahlen: enum Farbe { blau, rot, gelb }; Dann sind: blau == 0, rot == 1, gelb == 2. Die Werte kann man auch explizit angeben: enum Lieblingszahlen { Antwort = 42, Teufel = 666 };

6 Seminar: "Einführung in C/C++"6 Zur Erinnerung: Pointer Zeiger sind Variablen, deren Inhalt auf andere Variablen verweist. int * X; Zeiger auf eine int Variable float * Y; Zeiger auf eine flaot Variable

7 Seminar: "Einführung in C/C++"7 Der address-of-Operator & Pointer speichern Adressen von Variablen ab. int foo; Variable foo int * bar = & foo; & gibt Adresse von foo, die dann in bar gespeichert wird. Mit dem address-of-Operator & kann man die Adresse einer Variablen bestimmen.

8 Seminar: "Einführung in C/C++"8 Der indirection-Operator * Das Gegenteil zum address-of-Operator & ist der indirection-Operator *: int foo = 37; foo enthält 37. int * bar = & foo; bar zeigt auf foo. int foo2 = * bar; foo2 enthält auch 37. Mit dem indirection-Operator kann man den Inhalt einer Variablen bestimmen, wenn man deren Adresse hat.

9 Seminar: "Einführung in C/C++"9 * bar foo X1 = foo; X1 = Inhalt von foo = 37. X2 = * bar; X2 = Inhalt von * bar = Inhalt von foo = 37. int foo = 37; int * bar = & foo;

10 Seminar: "Einführung in C/C++"10 Nullpointer Ein Pointer kann auch eine 0 enthalten: int * bar = 0; int foo = *bar; //boeser Fehler!

11 Seminar: "Einführung in C/C++"11 Pointer auf Pointer Pointer können auch auf Pointer zeigen: int foo = 5; int * bar = & foo; int * * bar2 = & bar; std::cout << * * bar2; Ausgabe: 5 bar2 ist ein Pointer auf einen Pointer auf ein int. *bar2 ist ein Pointer auf ein int. **bar2 ist ein int.

12 Seminar: "Einführung in C/C++"12 Pointer und Arrays Pointer zeigt auf Elemente eines Arrays: int arr [3] = {2,3,5}; int * bar = arr; bar zeigt auf das das erste Element von arr int foo = * bar; setzt foo auf 2 Ein Array verhält sich so, als wäre es ein Pointer auf sein erstes Element.

13 Seminar: "Einführung in C/C++"13 Der subscript-Operator [ ] Mit [ ] kann man auf die einzelnen Elemente eines Arrays zugreifen: int arr [3] = {2,3,5}; int foo = arr [2]; setzt foo auf 5 Der Index des ersten Elements eines Arrays ist 0.

14 Seminar: "Einführung in C/C++" = 8 Indirection-Operator * und Subcript-Operator [ ] sind miteinander verwandt: foo = arr[2]; foo = *(arr + 2); Beides funktioniert auch mit Pointern. Aber Achtung: int * bar = 0; bar enthält 0 bar = bar + 2; bar wird um 2 int weiter gesetzt, und enthält nun also eine 8!

15 Seminar: "Einführung in C/C++"15 C-Strings C-Strings sind Arrays von chars: char s1 [] = "hallo"; s1[1] = 'e'; s1 == "hello" Vorsicht: char * s2 = "hallo"; s2[1] = 'e'; Fehler! Grund: s2 zeigt zwar auf einen Speicherbereich, in dem "hallo" steht, dieser ist aber gewöhnlich nicht schreibbar.

16 Seminar: "Einführung in C/C++"16 Mehrdimensionale Arrays Mehrdimensionale Arrays werden einfach als Arrays von Arrays realisiert. Bsp.: int arr2 [3][6]; ist ein Array von 3 Arrays von 6 ints. Der Zugriff erfolgt z.B. mit mehreren [ ]: int arr2 [3][6]; arr2[1][4] = 17;

17 Seminar: "Einführung in C/C++"17 Der sizeof()-Operator Der Operator sizeof() gibt den Speicherbedarf einer Variablen (in Bytes) an: int i; int j = sizeof(i); j == 4 Dies funktioniert auch für komplexere Typen: short s[10]; sizeof(s) == 20 char * p; sizeof(p) == 1 bool b; sizeof(b) == 1

18 Seminar: "Einführung in C/C++"18 Arrays variabler Länge?... versuchen wir mal was: int size; cin >> size; int arr [size]; Fehler beim Compilieren Die Dimensionsangaben bei der Definition von Arrays muss eine zur Compilezeit bekannte Konstante sein!

19 Seminar: "Einführung in C/C++"19 Der new - Operator Mit dem new-Operator kann man zur Laufzeit Speicher für Variablen reservieren. Bsp.: int size; cin >> size; int * arr = new int [size]; new liefert einen Pointer auf den reservierten Speicher zurück. arr zeigt nun auf das erste Element eines Arrays von int mit size Elementen.

20 Seminar: "Einführung in C/C++"20 Zu jedem new gehört ein delete ! Ein mit dem new-Operator reservierter Speicherbereich muss mit dem delete-Operator wieder freigegeben werden: int * arr = new int [100]; //... // verwende arr //... delete arr; memory leak

21 Seminar: "Einführung in C/C++"21 Themawechsel: lokale Variablen Wiederholung: Gültigkeit von Deklarationen Regel 2: »Eine Deklaration, die innerhalb eines { } -Blockes steht, gilt auch nur lokal innerhalb dieses Blockes.«

22 Seminar: "Einführung in C/C++"22 Beispiel für eine lokale Variable int X = 12; int readNumber() { int X; neues X! std::cin >> X; return X; } int Y = readNumber(); std::cout << X; Ausgabe: 12

23 Seminar: "Einführung in C/C++"23 Lokale Variablen sterben jung int * getPrimArray() { int arr[] = {2, 3, 5, 7}; return arr; Problem! } int * prims = getPrimArray(); Variable arr wird nach Ende der Funktion getPrimArray() zerstört.

24 Seminar: "Einführung in C/C++"24 Lebensdauer von Variablen 1.Static-Variablen: Die Variable lebt so lange wie das Programm läuft. 2. Auto-Variablen: Die Variable lebt so lange, bis der die Definition umgebene { }-Block verlassen wird. 3. Heap-Variablen: Die Variable lebt so lange, bis sie mit delete zerstört wird.

25 Seminar: "Einführung in C/C++"25 Das Schlüsselwort static Mit static kann man eine lokale Variable von einer Auto- zu einer Static-Variablen machen. Bsp.: void ichZaehleMit() { static int count = 0; ++count; std::cout << "Aufruf " << count << "."; }

26 Seminar: "Einführung in C/C++"26 Rückgabe in Argumenten Beispiel für eine Funktion mit mehr als einem Rückgabewert: void nimmZwei(int * X, int * Y) { std::cin >> *X; std::cin >> *Y; } int A, B; nimmZwei(&A, &B);

27 Seminar: "Einführung in C/C++"27 Alternative zu Pointern Das gleiche Beispiel, aber diesmal mit Referenzen: void nimmZwei(int & X, int & Y) { std::cin >> X; std::cin >> Y; } int A, B; nimmZwei(A, B);

28 Seminar: "Einführung in C/C++"28 Referenzen Technisch gesehen sind Referenzen Pointer – sie tun aber so, als wären sie keine. PointerReferenzen int X; int * ptr = & X;int & ref = X; *ptr = 12;ref = 12;

29 Seminar: "Einführung in C/C++"29 1. Quiz: Referenzen umbiegen. Frage: Was gibt dieses Programm aus? int X = 5; int Y = 8; int & Z = X; Z = Y; std::cout << X;

30 Seminar: "Einführung in C/C++"30 2. Quiz: ein kurzes Array Frage: Was ist der Unterschied zwischen folgenden Variablen? int Var1 = 5; int Var2 [] = {5};

31 Seminar: "Einführung in C/C++"31 3. Quiz: Lauter Zeichen! Was bedeuten die einzelnen markierten Zeichen in folgendem Code? int X [] = { 1, 2, 3 }; int Y = X[1] & X[2]; int & Z = X[0]; int * A = & Z; Z = Z * * X;

32 Seminar: "Einführung in C/C++"32 (Notizseite)


Herunterladen ppt "Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring SS 2004."

Ähnliche Präsentationen


Google-Anzeigen