C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

Ähnliche Dokumente
C++ - Objektorientierte Programmierung Konstante und statische Elemente

Programmierung mit C Zeiger

C++ - Einführung in die Programmiersprache Funktionen. Leibniz Universität IT Services Anja Aue

Angewandte Mathematik und Programmierung

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

2. Programmierung in C

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Algorithmen und Datenstrukturen

C++ - Objektorientierte Programmierung Vererbung

C++ - Einführung in die Programmiersprache Arrays

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

Crashkurs C++ - Teil 1

C++ - Einführung in die Programmiersprache Schleifen

Hydroinformatik I: Referenzen und Zeiger

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

Hydroinformatik I: Referenzen und Zeiger

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

Zeiger und dynamischer Speicher

8. Referenzen und Zeiger

Variablen, Konstanten und Datentypen

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

C- Kurs 07 Höhere Datentypen

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

Programmierung mit C Strukturen

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

Zeiger: Der Adressoperator &

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

9. Vektoren. (auch Felder/array)

einlesen n > 0? Ausgabe Negative Zahl

Vorlesung Programmieren

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

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

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Programmierkurs C++ Datenstrukturen Seite 1

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

Speicherklassen (1) Lokale Variablen

Grundlagen der Informatik 11. Zeiger

Welche Informatik-Kenntnisse bringen Sie mit?

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

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

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

3.2 Datentypen und Methoden

Klassen als Datenstrukturen

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

RO-Tutorien 15 und 16

Dynamische Datentypen

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Einstieg in die Informatik mit Java

Java Datentypen und Variablen

7. Organisation von Informationen

Kapitel 4: Zeiger. Inhalt. Zeiger Zeigerarithmetik

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Wertebereich und Genauigkeit der Zahlendarstellung

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Projekt 3 Variablen und Operatoren

Elementare Datentypen in C++

F Zeiger, Felder und Strukturen in C

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

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

Zeiger, Arrays und Strings in C und C++

Algorithmen zur Datenanalyse in C++

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Einstieg in die Informatik mit Java

7. Übung Informatik II - Objektorientierte Programmierung

C++ - Einführung in die Programmiersprache Variablen und Konstanten. Leibniz Universität IT Services Anja Aue

1 Klassen und Objekte

Einführung in die Programmiersprache C

Strukturierte Datentypen

Kapitel 6: Dynamische Speicherverwaltung

Kapitel 2/3: Darstellung von Information / Kontrollstrukturen. Inhalt. Zusammengesetzte Datentypen Wiederholungen (in Programmen)

C-Propädeutikum Höhere Datentypen

Grundlagen und Konzepte von C Datenstrukturen

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

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Einführung in die Programmierung Wintersemester 2014/15

Modellierung und Programmierung 1

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

5. Abgeleitete Datentypen

Aufbau von Klassen. class punkt {...

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Klassen und Objekte

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Advanced Programming in C

C++ für Spieleprogrammierer

Abgeleitete Datentypen

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Programmierung mit C Speicherverwaltung

Arrays. Einleitung. Deklarieren einer Array Variablen

6 ZEIGER UND REFERENZEN - ALLGEMEINES

Einführung in die Programmierung

Physische Datenstrukturen

Transkript:

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue

Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse. Platzhalter für den Beginn eines Speicherbereichs, an dem ein Wert von einem Datentyp gespeichert ist. C++ - Einführung 06.05.15 Seite 2

Vorteile / Nutzen Der Verweis auf eine Speicheradresse benötigt meist weniger Speicher als der Wert, auf den verwiesen wird. Manipulation von Werten an verschiedenen Positionen. Reservierung und Freigabe von Speicher. Implementation von Stacks, Listen etc. C++ - Einführung 06.05.15 Seite 3

in C++ int main() { double *ptrwert; double varwert; double summe; } varwert = 4.5; ptrwert = &varwert; summe = varwert + *ptrwert; return 0; Beispiele/_0601_Zeiger... C++ - Einführung 06.05.15 Seite 4

Deklaration double *ptrwert ; Datentyp *name ; double* ptrwert ; Datentyp* name ; Das Sternchen kennzeichnet einen Zeiger. Um Fehler zu vermeiden, sollte das Sternchen immer direkt vor dem Namen des Zeigers geschrieben werden. In diesem Beispiel verweist der Zeiger auf einen Wert vom Typ double. D. h. der Zeiger verweist auf einen Speicherbereich, der so groß ist, dass dort eine Gleitkommazahl vom Typ double abgelegt werden kann. C++ - Einführung 06.05.15 Seite 5

Datentypen eines Zeigers Wie viel Speicher wird benötigt? Wie wird der Wert interpretiert, auf den verwiesen wird? Alle Standardtypen und in Bibliotheken definierte Datentypen sind möglich. C++ - Einführung 06.05.15 Seite 6

Initialisierung ptrwert = &varwert ; Zeiger müssen mit einer Speicheradresse initialisiert werden. An dieser Speicheradresse kann zum Beispiel der Wert einer Variablen liegen. Der Zeiger und der Wert, auf den der Zeiger verweist, sollten den gleichen Datentyp haben. C++ - Einführung 06.05.15 Seite 7

Speicheradresse einer Variablen ptrwert = &varwert ; Das kaufmännische Und wird als Adressoperator bezeichnet. Der Adressoperator wird direkt vor den Anfang des Variablennamen geschrieben. Der Adressoperator gibt die Anfangsadresse eines Speicherbereichs von einer bestimmten Größe zurück. C++ - Einführung 06.05.15 Seite 8

Dereferenzierung varwert = *ptrwert ; Das Sternchen vor einem Zeiger in Anweisungen wird als Dereferenzierungsoperator bezeichnet. Mit Hilfe des Dereferenzierungsoperator wird der Wert an der Speicherstelle, auf die der Zeiger verweist, zurückgegeben. Eine Überprüfung der Speicheradresse auf Gültigkeit findet nicht statt. C++ - Einführung 06.05.15 Seite 9

Manipulation von Werten *ptrwert = *ptrwert * varwert ; Die Werte, auf die der Zeiger verweist, können entsprechend ihres Datentyps verwendet werden. Werte können mit Hilfe von Ausdrücken neu berechnet werden. C++ - Einführung 06.05.15 Seite 10

Grafische Darstellung: Deklaration der Variablen 00401008? int 0040100C? char 00401004? float der Zeiger 00501008 0050100C 00501004??? int * char * float * C++ - Einführung 06.05.15 Seite 11

Grafische Darstellung: Initialisierung der Variablen 00401008 0040100C 00401004 int var= 3 3?? int char float 00501008 0050100C 00501004 00401008?? int * char * float * C++ - Einführung 06.05.15 Seite 12

Grafische Darstellung: Initialisierung des Zeigers 00401008 3 int 0040100C? char 00401004? float int ptr = &var 00501008 00401008 int * 0050100C? char * 00501004? float * C++ - Einführung 06.05.15 Seite 13

Grafische Darstellung: Derefenzierung 00401008 553 int 0040100C? char 00401004? float *ptr = 5 00501008 00401008 int * 0050100C? char * 00501004? float * C++ - Einführung 06.05.15 Seite 14

Fehler double *ptrwert; double varwert; varwert = 4.5; *ptrwert = varwert; Wenn ein Zeiger nicht initialisiert ist, stürzt das Programm ab. Bei der Kompilierung wird kein Fehler gemeldet. C++ - Einführung 06.05.15 Seite 15

Undefinierter Zeiger double *ptrwert = NULL; int *ptrzahl = 0; double varwert; varwert = 4.5; ptrwert = &varwert; double *ptrwert; int *ptrzahl; double varwert; varwert = 4.5; ptrwert = &varwert; ptrwert = NULL; ptrzahl = 0; Der Zeiger ist undefiniert. Der Zeiger verweist auf keine Speicherstelle. NULL ist in der Bibliothek <iostream> definiert. C++ - Einführung 06.05.15 Seite 16

Ist der Zeiger undefiniert? if (ptrwert == NULL) { } if (!ptrwert) { } Wenn der Zeiger undefiniert ist,... C++ - Einführung 06.05.15 Seite 17

Dynamische Speicheranforderung int main() { int *ptrwert; ptrwert = new int(0); Beispiele/_0601_ZeigerDynamisch... } if(ptrwert) { *ptrwert = 1; delete ptrwert; } return 0; C++ - Einführung 06.05.15 Seite 18

Speicher anfordern int *ptrwert; ptrwert = new int(); Mit Hilfe des Schlüsselwortes new wird Speicher angefordert. Der Speicher wird im Heap des Rechners bereitgestellt. Dem Schlüsselwort folgt die benötigte Größe des Speicherbereichs. In diesem Beispiel wird Speicher für ein Integer angefordert. Falls nicht genügend Speicher vorhanden ist, wird ein undefinierter Zeiger zurück geliefert. C++ - Einführung 06.05.15 Seite 19

Anfordern und initialisieren int *ptrwert; ptrwert = new int(5); delete ptrwert; In den runden Klammern kann ein Wert zur Initialisierung des Speichers angegeben werden. C++ - Einführung 06.05.15 Seite 20

Speicher freigeben int *ptrwert; ptrwert = new int(); delete ptrwert; Mit Hilfe des Schlüsselwortes delete wird der angeforderte Speicher freigegeben. C++ - Einführung 06.05.15 Seite 21

Zeiger auf einen konstanten Wert const const char *ptrwert ; Datentyp *name ; Der Zeiger zeigt auf einen konstanten Wert an einer bestimmten Speicherstelle. Der Wert kann nicht verändert werden. C++ - Einführung 06.05.15 Seite 22

Konstanter Zeiger char * const ptrwert = &wert ; Datentyp * const name = &variable ; Die, in dem Zeiger gespeicherte Adresse, kann nicht verändert werden. Der Verweis ist konstant und darf nicht verändert werden. C++ - Einführung 06.05.15 Seite 23

Referenz Alias für eine andere Variable. Alternativer Name für eine Variablen Konstante Zeiger auf eine Variable. Zeiger können nicht auf Referenzen verweisen. C++ - Einführung 06.05.15 Seite 24

Beispiel int messwert = 10; int &wert = messwert; messwert = messwert + 2; wert = wert + 2; Beispiele/_0602_Referenz... C++ - Einführung 06.05.15 Seite 25

Deklaration char & wert = messwert ; Datentyp & name = variable ; Referenzen werden durch das kaufmännische Und gekennzeichnet. Referenzen müssen deklariert und gleichzeitig initialisiert werden. C++ - Einführung 06.05.15 Seite 26

Datenstrukturen Zusammenfassung von Variablen unterschiedlichsten Datentyps. Sammlung von Komponenten eines Ganzen. Beschreibung eines konkreten Objekts. Abstraktes Modell von Dingen aus der realen Welt. C++ - Einführung 06.05.15 Seite 27

Beispiele Personenname, Geburtsdatum und Geburtsort. x- und y-koordinaten. Artikel, Preis und deren Bestand im Lager. C++ - Einführung 06.05.15 Seite 28

Beispiele/_0603_Struktur... Beispiel struct umfrage{ char geschlecht; int alter; double gewicht; double groesse; }; int main(){ umfrage proband; proband.geschlecht = 'w'; proband.alter = 48 proband.groesse = 1.78; return 0; C++ - Einführung 06.05.15 Seite 29

Deklaration einer Struktur struct Strukturname Kopf { datentyp strukturelement ; datentyp strukturelment ; Rumpf } ; C++ - Einführung 06.05.15 Seite 30

Deklaration einer Struktur struct umfrage { }; Dem Schlüsselwort struct folgt der Name der Struktur. Die geschweiften Klammern kennzeichnen den Beginn und Ende des Rumpfes der Struktur. Innerhalb der geschweiften Klammern werden die Strukturelemente definiert. Die Datenstruktur wird mit einem Semikolon beendet. C++ - Einführung 06.05.15 Seite 31

Strukturelemente Beschreibung einer Komponente eines Objekts. Definition / Beschreibung eines Objekts. C++ - Einführung 06.05.15 Seite 32

Deklaration von Strukturelementen struct umfrage { char geschlecht; int alter; double gewicht; double groesse; }; Die Komponenten in einer Datenstruktur werden genauso wie Variablen deklariert. Strukturelemente können nur innerhalb einer Struktur deklariert werden. Jede Deklaration endet mit einem Semikolon. C++ - Einführung 06.05.15 Seite 33

Eigenschaften Jedes Element innerhalb der Struktur hat einen eindeutigen Namen. Jedes Strukturelemente ist von einem bestimmten Datentyp. Entsprechend des Datentyps wird Speicherplatz für die Komponenten bereitgestellt. Das Strukturelement wird über eine Variable vom Datentyp Struktur angesprochen. Das Strukturelement selber ist nur innerhalb der Struktur sichtbar. C++ - Einführung 06.05.15 Seite 34

Strukturvariable umfrage proband ; Strukturname variablenname ; Datentyp variablenname ; Die Variable ist vom Datentyp Struktur. Statt der Standard-Datentypen wie float, int etc. wird der Name einer Struktur als Datentyp genutzt. C++ - Einführung 06.05.15 Seite 35

Nutzung der Strukturvariablen proband. geschlecht variable. element Mit Hilfe des Punktoperators wird die Strukturvariable mit der Komponente verbunden. Die Strukturvariable ist vom Datentyp Struktur. In dieser Struktur ist das mit der Variable verbundene Element deklariert. C++ - Einführung 06.05.15 Seite 36

Zuweisung proband. geschlecht = 'w' ; variable. element = wert ; Mit Hilfe des Zuweisungsoperators wird der Strukturvariablen ein Wert zugewiesen. Strukturvariablen können genauso wie alle anderen Variablen entsprechend ihres Datentyps verwendet werden. C++ - Einführung 06.05.15 Seite 37

Zeiger und Strukturen struct umfrage{ char geschlecht; int alter; double gewicht; double groesse; }; Beispiele/_0603_Struktur... umfrage proband; double bmi = 0; umfrage *ptrproband = &proband; bmi = ptrproband->groesse * ptrproband->groesse; bmi = ptrproband->gewicht / bmi; C++ - Einführung 06.05.15 Seite 38

Deklaration des Zeigers umfrage *ptrproband ; Datentyp *name ; Statt eines Datentyps int etc. wird der Name der Struktur als Typ genutzt. C++ - Einführung 06.05.15 Seite 39

Initialisierung ptrproband = &proband ; Das kaufmännische Und wird als Adressoperator bezeichnet. Der Adressoperator wird direkt vor den Anfang der Variablen vom Datentyp Struktur geschrieben. Der Zeiger und die Variable sind vom gleichen Datentyp Struktur. C++ - Einführung 06.05.15 Seite 40

Zugriff auf die Strukturvariable ptrproband -> groesse Aus dem Bindestrich und dem Größer-Zeichen wird der Elementverweis zusammengesetzt. Mit Hilfe des Elementverweises wird der Zeiger mit einem Strukturelement verbunden. Der Zeiger verweist auf eine Struktur. In dieser Struktur ist das, rechts vom Operator stehende, Strukturelement definiert. C++ - Einführung 06.05.15 Seite 41