Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Imperative Programmierung
Forschungszentrum caesar
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
der Universität Oldenburg
der Universität Oldenburg
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Das erste Programm (Folie 16)
Arrays,Strings&Pointer in C/C++
Wichtige Fachausdrücke in C
Einführung in die Programmiersprache C 1
Repetitorium PG : Pointer FH-Darmstadt, FB Informatik.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Dynamische Datentypen
Programmierung 1. Einführung Seite 1
Arduino Kurs Abend 2.
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Programmieren in C Grundlagen C 2
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Einführung in die Programmierung mit Java
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Einführung. Ziel der Veranstaltung  Vermittlung von Grundkenntnissen in C++  Solide Basis für anschließende Weiterentwicklung  Fähigkeit, kleine Programme.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Ein Spiel mit der SDL – Teil 2. Ein Spiel mit der SDL TSingleton CTimerCFramework CGame CPlayer CShot CAsteroids CSprite.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Operator Overloading, Mehrfachvererbung, Safe Pointer, Observer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Singletons, Exceptions und (s)printf. Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden.
Operatoren, Kontrollstrukturen und Funktionen. Logische Operatoren  zum Vergleich zweier Ausdrücke  ==, !=,, =  Ergebnis ist vom Typ bool  Achtung!
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Einführung in die Programmierung
Einführung in die Programmierung
«Delegierter» Methoden Schablone Funktionszeiger
Felder in der Informatik
Einführung in die Programmierung
 Präsentation transkript:

Pointer

Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“

Precompiled Header  stdafx.h alle include-Dateien des Projektes  stdafx.cpp Vorlage für die vorkompilierte pch-Datei #include "stdafx.h" // Hauptprogramm #include // Weitere includes #include "stdafx.h" // Vorlage für vorkompilierte // Objektdatei main.cpp stdafx.h stdafx.cpp

Precompiled Header  #pragma once einmaliges Einbinden der Datei  #define _WIN32_WINNT 0x0501 Verwendung von Funktionen ab bestimmter Windowsversion  #include Ersetzungsdefinitionen für Unicode / ANSI – Funktionen ProjectSettings > General > Character Set  int _tmain(int argc, _TCHAR* argv[]) Einstiegspunkt mit Parametern

Headerdatei – Eine Anwendung  Größe der Datentypen maschinenabhängig  typedef: Deklaration eines benutzerdefinierten Synonyms typedef int int32;  Verwendung von int32 äquivalent zu int

Aufgabe 5: typedef-header  Erstelle eine Headerdatei, die folgende Datentypen als Synonyme zur Verfügung stellt: int8; uint8; int16; uint16; int32; uint32; int64; uint64 'u' steht für unsigned die Zahl für die Größe des Datentyps in Bit  Benutze die erstellte Headerdatei in einem kleinen Programm, welches die Größe der definierten Datentypsynonyme ausgibt

Pointer und Referenzen  Wie „merkt“ sich der Rechner den Inhalt (Wert) einer Variablen Im Speicher abgelegte Variable (z.B. int) Programm „weiß“ beim Zugriff auf die Variable, an welcher Stelle diese im Speicher abgelegt ist Zugriff (lesen / schreiben) auf den Inhalt Interpretation nach Datentyp … …

Pointer und Referenzen  Hinter den Kulissen: Definition einer Variablen Reservieren einer Stelle im Speicher Interne Zuordnung von Variablennamen, Typ und Speicherstelle ev. implizite Initialisierung  Zugriff auf eine Variable Ermitteln der Speicherstelle anhand der Zuordnung Auslesen / Beschreiben der Speicherstelle  Variable verliert Gültigkeit Freigeben der reservierten Speicherstelle

Pointer und Referenzen  Ein Pointer ist eine Variable, deren Inhalt eine Speicheradresse ist … … … …

Pointer und Referenzen  Der Inhalt eines Pointers ist die Startadresse einer anderen Variablen  Die Größe des zu interpretierenden Speicherblockes wird durch den Typen des Pointers bestimmt

Die Adresse einer Variablen  Die Adresse einer Variablen gibt die Stelle im Speicher an, in der sie gespeichert ist  Zugriff auf die Adresse über den Adressoperator (&), der direkt vor die Variable geschrieben wird int myVar = 12; cout << "Adresse von myVar: " << &myVar; Ausgabe: Adresse von myVar: 0012FF60

Aufgabe 6: Speicheradressen  Erstelle ein einfaches Programm mit 3 Variablen statisches Array vom Typ char mit 5 Feldern int double  Ermittle die Speicheradressen dieser Variablen und gib sie in der Konsole aus

Der Adressoperator &  Ermittelt die Adresse einer Variablen  ist kein lvalue &myVar1 = &myVar2; funktioniert NICHT!  Ein lvalue für die Adresse wird benötigt  Pointer!

Pointer  Definition mittels * vor demVariablennamen int *myPointer = NULL; der Typ gibt dabei den Typ der Variablen an, auf die der Pointer zeigen soll möglichst mit NULL Initialisieren  Zuweisung der Adresse einer Variablen myPointer = &myVariable dabei muss die Variable den gleichen Typ wie der Pointer haben Inhalt der Variablen myPointer ist die Adresse der Variablen myVariable

Pointer int myVar = 14; // normale Variable int *myPointer = NULL; // Variable vom Typ Pointer auf int myPointer = &myVar; cout << "Adresse von myVar: " << &myVar << endl; cout << "Inhalt von myPointer: " << myPointer << endl; Ausgabe: Adresse von myVar: 0012FF60 Inhalt von myPointer: 0012FF60

NULL-Pointer  NULL-Pointer bezeichnet einen ungültigen Pointer Pointer verweist auf keine gültige Adresse #define NULL 0  Pointer zeigt bei Definition ohne explizite oder implizite Initialisierung auf zufällige Adresse

Änderung von Variablen mittels Pointer  Zugriff auf den Inhalt der Variablen, auf die ein Pointer zeigt mittels * int myVar = 10; int *myPointer = NULL; myPointer = &myVar; *myPointer = 20; cout << "Inhalt, auf den myPointer zeigt: " << *myPointer;

Aufgabe 7: Erste Pointer  Lege je 2 Variablen vom Typ int32, bool und double an.  Erstelle für jeden dieser Datentypen einen Pointer  Gib die Adresse und den Inhalt der 6 Variablen in der Konsole aus. Benutze dazu nur die Pointer.  Gib die Adresse und den Inhalt der benutzten Pointer aus

Referenzen  Eine Referenz ist eine alternative Zugriffsmöglichkeit auf eine Variable  intern ein Zeiger auf eine Variable  Eine Referenz muss explizit initialisiert werden  keine nachträgliche Zuweisung einer anderen Variable möglich  Operatoren wirken immer auf den Inhalt, der sich hinter einer Referenz verbirgt

Referenzen  Definition mittels & vorm Variablennamen int myVar = 10; // normale Variable int &myRef = myVar; // Referenz  beide Variablen zeigen auf die gleiche Stelle im Speicher

Referenzen – Warum?  Wenn Referenzen genau das Gleiche machen wie Variablen – wofür braucht man sie dann?  Wir erinnern uns an Funktionen … Parameterübergabe immer call-by-value kein nachhaltiges Ändern des übergebenen Parameters möglich Bei einem Funktionsaufruf wird immer eine Kopie der Variablen angelegt

Referenzen als Funktionsparameter  Name des Parameters mit Adressoperator & void myFunction(int &myIntParam)  Keine Inhaltskopie sondern Variable, die auf die gleiche Speicherstelle zeigt  Keine aufwändigeres Kopieren bei größeren Strukturen

Konstante Referenzen  Variable soll nicht verändert werden  Übergabe als Referenz um eventuell aufwändiges Kopieren zu vermeiden  Deklaration des Parameters als const void myFunction(const int &myIntParam)

Aufgabe 8: Erste Referenzen  Erstelle Funktionen zum Verdoppeln eines 32bit und eines 64bit Integers. Der Rückgabewert (bool) soll über den Erfolg der Operation Auskunft geben.  Erstelle Funktionen zur Ausgabe des Ergebnisses der oben genannten Funktionen  Erstelle ein Programm, welches solange die oben genannten Funktionen aufruft, bis die Verdoppelungsfunktion fehlschlägt.

Pointer als Funktionsparameter type myFunction(type *intPointer)  Keine Inhaltskopie sondern Variable, die auf die Speicherstelle zeigt  Keine aufwändigeres Kopieren bei größeren Strukturen  … und wo ist jetzt der Unterschied zu Referenzen?

Pointer oder Referenz? void myFunc1(int &myVar); void myFunc2(int *myVar); Aufruf der Funktionen: int i; myFunct1(i); myFunct2(&i);

* und &  Bei der Definition int var1 // „normale“ Variable int *var2 // Zeiger auf einen Integer int *var2 = NULL // … incl. Initialisierung (NULL) int *var2 = &var1 // … auf gültige Variable int &var3 = var1 // Referenz auf var1, implizite Initialisierung muss sein  Gleiche Syntax (ohne Initialisierung) im Funktionskopf

* und &  Verwendung bei Zuweisung Referenz wie ganz normale Variable! Zugriff auf den Inhalt der Variablen, auf die der Pointer zeigt ○ cout << *var2; // Dereferenzierung über * ○ *var2 = 10; // Auch schreibend möglich Zugriff auf die Adresse der Variablen, auf die der Pointer zeigt ○ cout << var2; // Die Adresse ist der Inhalt des Pointers Zugriff auf Adresse einer normalen Variablen ○ var2 = &var1;

Dynamische Speicherverwaltung  Anfordern, Verwalten und Freigeben von Speicher nach Bedarf zur Laufzeit  Spezielle Operatoren in C++ new zur Resservierung des Speichers ○ keine Garantie einer impliziten Initialisierung! delete zur Freigabe des verwendeten Speichers ○ nur auf den BasePointer anwendbar! int32 *dynVar = new int32; delete dynVar;

Dynamische Speicherverwaltung  Pointer beliebig oft verwendbar  Speicherreservierung mit expliziter Initialisierung dynVar = new int32(10);  Wenn ein Pointer nicht mehr auf eine gültige Variable zeigt, auf NULL setzen! delete dynVar; dynVar = NULL;