Crashkurs C++ - Teil 1

Ähnliche Dokumente
Einführung in die Programmiersprache C

Angewandte Mathematik und Programmierung

Vorlesung Programmieren

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Zeiger, Arrays und Strings in C und C++

Felder (Arrays) und Zeiger (Pointers) - Teil I

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

Programmierung mit C Zeiger

Algorithmen und Datenstrukturen

8. Referenzen und Zeiger

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

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

F Zeiger, Felder und Strukturen in C

Felder (Arrays) und Zeiger (Pointers) - Teil I

Dynamische Datentypen

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

2. Programmierung in C

Visuelle Kryptographie. Anwendung von Zufallszahlen

Zeiger und dynamischer Speicher

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Arrays,Strings&Pointer in C/C++

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

Programmierkurs C++ Variablen und Datentypen

Zeiger: Der Adressoperator &

Hydroinformatik I: Referenzen und Zeiger

Speichermanagement Software Entwicklung 1

Praxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung"

Zeiger & Co. Verwendung und Zeigerarithme5k. thorsten möller - informa5k.unibas.ch/lehre/fs13/cs109/03- c++- zeiger.pdf. Strukturen. enum.

Zeiger in C und C++ Zeiger in Java und C/C++

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

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

C++ - Objektorientierte Programmierung Konstante und statische Elemente

7. Organisation von Informationen

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Grundlagen der Informatik 11. Zeiger

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Einstieg in die Informatik mit Java

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Repetitorium Informatik (Java)

Programmierkurs C++ Templates & STL (1/2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Hydroinformatik I: Referenzen und Zeiger

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

RO-Tutorien 3 / 6 / 12

Dynamische Speicherverwaltung

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Einstieg in die Informatik mit Java

Kapitel 4: Zeiger. Inhalt. Zeiger Zeigerarithmetik

Programmierkurs C++ Datenstrukturen Seite 1

Java Datentypen und Variablen

Das folgende Programm demonstriert, wie man Speicheradressen von Variablen ermittelt.

Pointer. Variablen. Pointer. Ein elementares Beispiel. Pointer in C

Typische Speicherfehler in C

Dynamische Speicherverwaltung

Einstieg in die Informatik mit Java

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Einführung in C. EDV1-04C-Einführung 1

Modellierung und Programmierung 1

Konzepte der Programmiersprachen

C/C++-Programmierung

Einstieg in die Informatik mit Java

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Programmieren in C. Zeiger und Zeichenketten. Prof. Dr. Nikolaus Wulff

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

3.2 Datentypen und Methoden

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

Klassen als Datenstrukturen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Grundlagen der OO- Programmierung in C#

RO-Tutorien 15 und 16

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

C- Kurs 07 Höhere Datentypen

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

VDK-Informatik

C++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen

Algorithmen und Programmierung II

Tag 4 Repetitorium Informatik (Java)

9 Zeiger (Pointer). Dynamischer Speicher

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Dynamischer Speicher

Proseminar - Zeiger in C

C++11. exportieren ihre Aufzählungsbezeichner in den umgebenden Bereich (name clashes) schwach typisiert (z.b. keine forward Deklaration möglich)

DAP2 Praktikum Blatt 1

Programmieren in C/C++ und MATLAB

Arrays. Einleitung. Deklarieren einer Array Variablen

Arrays (Felder/Vektoren)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Einführung in die Programmierung für NF MI. Übung 04

Kapitel 6: Dynamische Speicherverwaltung

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Einstieg in die Informatik mit Java

Transkript:

Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik Martin-Luther-Universität Halle-Wittenberg

Intro C++ ist die objektorientierte Weiterentwicklung von C C++ ist maschinennah implementiert direkte Manipulation des Speichers möglich!!! C++ erfordert eine explizite Speicherverwaltung (keine garbage collection!) hohe Flexibilität (aber auch höhere Komplexität... ) durch Pointer-Datentyp Mehrfachvererbung Templates Angewandte Bildverarbeitung, WS 2003-2004 1

Speicherverwaltung Der Kern des Ganzen: C++ unterscheidet zwischen einer Variablen und ihrer Position im Speicher daraus folgen grundsätzlich 3 Arten von Variablen-/Objekt-Datentypen: einfache Variablen beliebigen Typs, z.b. int, double, bool Zeigervariablen bestimmten Typs, z.b. int*, double*, bool* Referenzen auf Variablen bestimmten Typs, z.b. int& int a; int* z; int& r; // Variable des Typs Integer // Variable des Typs "Zeiger auf Integer" // Referenz des Typs Integer Angewandte Bildverarbeitung, WS 2003-2004 2

Speicherverwaltung - Variablen & Zeiger Beispiel: Angewandte Bildverarbeitung, WS 2003-2004 3

Speicherverwaltung - Variablen & Zeiger Beispiel: Variable x vom Typ T: T x; x = 50; Angewandte Bildverarbeitung, WS 2003-2004 3

Speicherverwaltung - Variablen & Zeiger Beispiel: Variable x vom Typ T: T x; x = 50; Angewandte Bildverarbeitung, WS 2003-2004 3

Speicherverwaltung - Variablen & Zeiger Beispiel: Variable x vom Typ T: T x; x = 50; Variable z vom Typ Zeiger auf T : T* z; z zeigt an, wo eine Variable im Speicher steht Angewandte Bildverarbeitung, WS 2003-2004 3

Speicherverwaltung - Variablen & Zeiger Beispiel: Variable x vom Typ T: T x; x = 50; Variable z vom Typ Zeiger auf T : T* z; z zeigt an, wo eine Variable im Speicher steht Zuweisung einer Adresse an z mit &: z = &x; Angewandte Bildverarbeitung, WS 2003-2004 3

Speicherverwaltung - Variablen & Zeiger Beispiel: Variable x vom Typ T: T x; x = 50; Variable z vom Typ Zeiger auf T : T* z; z zeigt an, wo eine Variable im Speicher steht Zuweisung einer Adresse an z mit &: z = &x; Zugriff auf Inhalte von x per Dereferenzierung *: *z liefert 50 Angewandte Bildverarbeitung, WS 2003-2004 3

Speicherverwaltung - Variablen & Zeiger Beispiel: Variable x vom Typ T: T x; x = 50; Variable z vom Typ Zeiger auf T : T* z; z zeigt an, wo eine Variable im Speicher steht Zuweisung einer Adresse an z mit &: z = &x; Zugriff auf Inhalte von x per Dereferenzierung *: *z liefert 50 wird x verändert, ändert sich nur *z, z selbst nicht! x = 40; *z = 40; Angewandte Bildverarbeitung, WS 2003-2004 3

Speicherverwaltung - Referenzen eine Referenz ist ein Alias für eine Variable Referenzen sind immer mit schon existierenden Variablen verknüpft Initialisierung direkt bei der Deklaration! int& a; int b; int& a = b; // geht nicht, Referenz uninitialisiert // ok, a verweist auf b jede Änderung wirkt sich jeweils auf Variable und Referenz aus wird die Variable gelöscht, wird auch die Referenz ungültig (Achtung bei Rückgabewerten von Funktionen!!!) auf eine Variable kann es mehrere Referenzen geben, aber Referenzen sind immer eindeutig Angewandte Bildverarbeitung, WS 2003-2004 4

Speicherverwaltung - Pointer-Arithmetik Pointer-Arithmetik Zeigervariablen sind Variablen mit besonderem Inhalt nutzbar wie jede andere Variable insbesondere auch in arithmetischen Berechnungen Pointerarithmetik: Fluch und / oder Segen von C / C++ effizienter Speicherzugriff vs. Sicherheit / Robustheit int a = 42; int* z = &a; z = z + 3; // springe 3 Positionen weiter im Speicher!!! (*z) -->???! Angewandte Bildverarbeitung, WS 2003-2004 5

Speicherverwaltung - Arrays Anwendungsbeispiel für Zeigervariablen: Felder (Arrays) ein Array entspricht einer Menge von linear hintereinander angeordneten Speicheradressen int array[10]; feld[0]; feld[5]; // Feld der Groesse 10 fuer 10 Integerwerte // Zugriff auf das erste bzw. sechste Feld Zugriff auf einzelne Elemente mit dem [ ] -Operator Arrays und Pointer sind gewissermaßen dual Pointer-Arithmetik als alternative Zugriffmöglichkeit Angewandte Bildverarbeitung, WS 2003-2004 6

Speicherverwaltung - Arrays ein Feldbezeichner entspricht einem Zeiger auf die Anfangsadresse eines Speicherbereichs int feld[10]; int* z = feld; der [ ] -Operator ist damit Derefenzierungs-Operator feld[0] == *z feld[5] == *(z+5) Angewandte Bildverarbeitung, WS 2003-2004 7

Speicherverwaltung - Allokation C++ unterscheidet 2 Arten der Speicherverwaltung / -allokation: statisch: Speicher wird vom Programm automatisch reserviert und wieder freigegeben dynamisch: Speicher wird explizit zur Laufzeit alloziert und freigegeben Dynamische Allokation ist notwendig, wenn der Speicherbedarf zur Compile-Zeit unbekannt ist Objekte global sichtbar sein sollen Dynamische Allokation basiert auf Zeigervariablen! Angewandte Bildverarbeitung, WS 2003-2004 8

Speicherverwaltung - Allokation Grundidee: fordere explizit Speicher an und verwalte diesen über Zeiger Operatoren: new : reserviert Speicher für ein Objekt / eine Variable T* new T(); delete : gibt reservierten Speicher wieder frei void delete(t*); helloworldclass* h; h = new helloworldclass(); h->sayhello(); delete h; // ok, Speicher wurde alloziert // nie vergessen!!! Angewandte Bildverarbeitung, WS 2003-2004 9

Speicherverwaltung wenn ein allozierter Bereich nicht mehr referenziert wird, gibt es Speicherlecks... void allozierespeicher() { helloworldclass* h= new helloworldclass(); } int main(int argc, char **argv) { allozierespeicher(); }; // Speicherleck!!! // die main-funktion Faustregel: zu jedem new im Programm muss es ein korrespondierendes delete geben! Besonderheit: Allokation von Speicher für Felder Operatoren: new [ ] und delete [ ] int *feld = new int[10]; delete [] feld; Angewandte Bildverarbeitung, WS 2003-2004 10

Literatur Weiterführende Literatur: Einführungsskript: C++ für Java-Programmierer (Skript der Technischen FH Berlin) Bjarne Strousstrup, Die C++ Programmiersprache, die Bibel für C++-Programmierer Prinz, Prinz, Objektorientierte Programmierung mit C++ Lippman, C++ Primer Scott, Meyers, (Mehr) Effizient C++ programmieren... ansonsten gilt: Versuch macht klug Angewandte Bildverarbeitung, WS 2003-2004 11