seminar: "einführung in c/c++" einführung in die programmiersprache c/c++ dienstag...
TRANSCRIPT
![Page 1: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/1.jpg)
Seminar: "Einführung in C/C++"
Einführung in die Programmiersprache C/C++
“Dienstag”
Andreas Dö[email protected]
SS 2004
![Page 2: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/2.jpg)
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 *, ...
3. Arrays:int [ ], float [ ] [ ], ...
![Page 3: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/3.jpg)
Seminar: "Einführung in C/C++" 3
typedefMit typedef kann man Typbeschreibungen
Namen geben:
typedef int * IntPtr;
IntPtr x; x ist nun vom Typ int *
typedef char (* T)[10];
T y;
![Page 4: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/4.jpg)
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;
![Page 5: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/5.jpg)
Seminar: "Einführung in C/C++" 5
enum-Werte sind ZahlenDie 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
};
![Page 6: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/6.jpg)
Seminar: "Einführung in C/C++" 6
Zur Erinnerung: PointerZeiger sind Variablen, deren Inhalt auf andere
Variablen verweist.
int * X; Zeiger auf eine int Variablefloat * Y; Zeiger auf eine flaot Variable
![Page 7: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/7.jpg)
Seminar: "Einführung in C/C++" 7
Der address-of-Operator &Pointer speichern Adressen von Variablen ab.
int foo; Variable fooint * bar = & foo; & gibt Adresse von foo,
die dann in bar
gespeichert wird.
Mit dem address-of-Operator & kann man die Adresse einer Variablen bestimmen.
![Page 8: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/8.jpg)
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.
![Page 9: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/9.jpg)
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;
![Page 10: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/10.jpg)
Seminar: "Einführung in C/C++" 10
NullpointerEin Pointer kann auch eine 0 enthalten:
int * bar = 0;
int foo = *bar; //boeser Fehler!
![Page 11: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/11.jpg)
Seminar: "Einführung in C/C++" 11
Pointer auf PointerPointer 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.
![Page 12: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/12.jpg)
Seminar: "Einführung in C/C++" 12
Pointer und ArraysPointer zeigt auf Elemente eines Arrays:
int arr [3] = {2,3,5};
int * bar = arr; bar zeigt auf das
das erste Element
von arrint foo = * bar; setzt foo auf 2
Ein Array verhält sich so, als wäre es ein Pointer auf sein erstes Element.
![Page 13: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/13.jpg)
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.
![Page 14: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/14.jpg)
Seminar: "Einführung in C/C++" 14
0 + 2 = 8Indirection-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!
![Page 15: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/15.jpg)
Seminar: "Einführung in C/C++" 15
C-StringsC-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.
![Page 16: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/16.jpg)
Seminar: "Einführung in C/C++" 16
Mehrdimensionale ArraysMehrdimensionale 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;
![Page 17: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/17.jpg)
Seminar: "Einführung in C/C++" 17
Der sizeof()-OperatorDer 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) == 1bool b; sizeof(b) == 1
![Page 18: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/18.jpg)
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!
![Page 19: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/19.jpg)
Seminar: "Einführung in C/C++" 19
Der new - OperatorMit 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.
![Page 20: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/20.jpg)
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
![Page 21: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/21.jpg)
Seminar: "Einführung in C/C++" 21
Themawechsel: lokale VariablenWiederholung:
Gültigkeit von Deklarationen
Regel 2: »Eine Deklaration, die innerhalb eines{ } -Blockes steht, gilt auch nur lokal innerhalb dieses Blockes.«
![Page 22: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/22.jpg)
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
![Page 23: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/23.jpg)
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.
![Page 24: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/24.jpg)
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.
![Page 25: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/25.jpg)
Seminar: "Einführung in C/C++" 25
Das Schlüsselwort staticMit 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 << ".";
}
![Page 26: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/26.jpg)
Seminar: "Einführung in C/C++" 26
Rückgabe in ArgumentenBeispiel 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);
![Page 27: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/27.jpg)
Seminar: "Einführung in C/C++" 27
Alternative zu PointernDas gleiche Beispiel, aber diesmal mit
Referenzen:
void nimmZwei(int & X, int & Y)
{
std::cin >> X;
std::cin >> Y;
}
int A, B;
nimmZwei(A, B);
![Page 28: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/28.jpg)
Seminar: "Einführung in C/C++" 28
ReferenzenTechnisch gesehen sind Referenzen Pointer
– sie tun aber so, als wären sie keine.
Pointer Referenzen
int X; int X;
int * ptr = & X; int & ref = X;
*ptr = 12; ref = 12;
![Page 29: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/29.jpg)
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;
![Page 30: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/30.jpg)
Seminar: "Einführung in C/C++" 30
2. Quiz: ein kurzes ArrayFrage: Was ist der Unterschied zwischen
folgenden Variablen?
int Var1 = 5;
int Var2 [] = {5};
![Page 31: Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Dienstag Andreas Döring doering@inf.fu-berlin.de SS 2004](https://reader033.vdocuments.us/reader033/viewer/2022051110/55204d6149795902118b4cb0/html5/thumbnails/31.jpg)
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;