Tutorium Software-Engineering SS14 Florian Manghofer.

Slides:



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

Ein- und Ausgabe von Dateien
Forschungszentrum caesar
Kapselung , toString , equals , Java API
Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Donnerstag Andreas Döring SS 2004.
der Universität Oldenburg
der Universität Oldenburg
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.
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
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 7 Claudio Moraga, Gisbert Dittrich FBI Unido
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
Zusammenfassung Vorwoche
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
Arrays,Strings&Pointer in C/C++
Java programmieren mit JavaKara
Repetitorium PG : Pointer FH-Darmstadt, FB Informatik.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Dynamische Datentypen
Referenztypen (II) und Const- Referenzen Temporäre Objekte, Const- Referenzen, was genau ist konstant?
Bereit ???? Nimm dir 10 Minuten Zeit. Ich versuche es dir zu erklären.
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
MODULA-2.
Ich habe nie gesehen was du eigentlich bist was du mir bringst was du mit mir machst wie viel du wert bist und warum ich dich mag.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
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.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Unterprogramme / Methoden
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.
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
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.
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.
Tutorium Software-Engineering SS14 Florian Manghofer.
Konstruktoren.
Programmieren in C Wie speichert C
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Einführung in die Programmierung
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Implementieren von Klassen
Felder in der Informatik
 Präsentation transkript:

Tutorium Software-Engineering SS14 Florian Manghofer

Zeiger (Pointer) Was ist ein Zeiger? Ein Zeiger ist eine Variable, die die Adresse einer andere Variable enthält. Wie macht man einen Zeiger? int *zeiger; // * ist „der Operator“ für einen Zeiger, Dereferenzierungsoperator Wie lasse ich den Zeiger auf etwas zeigen? int x = 3; int *zeiger;//Ein Zeiger muss den selben Datentyp haben zeiger = &x;//wie die Variable, auf der er zeigen soll Was macht jetzt das & ? & ist der Referenzierungsoperator/Adressoperator, er gibt die Adresse einer Variablen zurück Was passiert wenn ich das & weglasse? Geht nicht! Es wird versucht einen Wert (3) in einer Adresse zu speichern. Oder: Es wird versucht einen Integer(3) in einem „Datentyp Adresse“ zu speichern. String in int kann man ja auch nicht machen!

Zeiger (Pointer) Was gibt mir cout << zeiger; aus? z.B: 0x28ff44 (Adresse) Wieso ist das nicht 3? Ein Zeiger speichert die Speicheradresse einer Variablen auf die er zeigt. Somit wird hier die Speicheradresse von x ausgegeben. Und wie gebe ich nun über den Zeiger den Wert von x aus? int x = 3; int *zeiger; zeiger = &x; cout << *zeiger; //Wert der Variablen, auf die zeiger zeigt (nicht Adresse) Wieso brauche ich hier schon wieder ein *? Weil sonst der „Wert“ von zeiger ausgegeben wird(Adresse von x), und nicht der Wert. *zeiger sagt hier, hole den Wert von der Variablen die an der Adresse zeiger steht.

Zeiger (Pointer) Adresse der Variable Name der Variable Adresse des Zeigers Name des Zeigers Wert der Variable Wert des Zeigers Variablen speichern Werte! Zeiger speichern Adressen!

Zeiger (Pointer) Wie war das nochmal mit Werten und Adressen von Zeiger und Variable? Adresse von x: cout << zeiger; | cout << &x; Wert von x: cout << *zeiger; | cout << x; Adresse von zeiger: cout << &zeiger; Was hat es mit Felder und den Zeigern auf sich? Der Name des Arrays ist eigentlich ein Zeiger auf das erste Feldelement. int zahlen[] = {1,2,3}; cout << zahlen;//Adresse des Feldes cout << *zahlen; //Wert des ersten Feldelements cout << zahlen[0];//Wert des ersten Feldelements cout << &zahlen[1]//Adresse des 2ten Feldelements int *zeiger = zahlen; //Zeiger zeigt auf das erste Feldelement cout << zahlen[2];//Wert des dritten Feldelements cout << zeiger[2]; //Wert des dritten Feldelements

Zeiger (Pointer) Gibt’s Zeiger auch als Parameter oder return Wert? Ja, funktioniert wie gewohnt: void hallo(int*);//Prototyp … void hallo(int *x){ cout << x;//Adresse von x ausgeben cout << *x;//Wert von x ausgeben } int* eins();//Prototyp … int* eins(){ int x = 3; int *p = &x; return p;//“Adresse“ des Zeigers zurückgeben }

Zeiger (Pointer) Schön und gut, aber was bringen mir Zeiger außer Verwirrung und mehr Variablen? Ohne Zeiger (wie gewohnt):Mit Zeiger (neu): Ausgabe:

Zeiger (Pointer) Wieso ist das so?? Aufruf mit (a,b) swap() arbeitet mit einer Kopie von a und b, bzw. mit dessen Werten x = b y = a Swap() hat fertig, aber x und y nicht mehr sichtbar… Es wurde nicht getausch!

Zeiger (Pointer) Wieso ist das so?? Zeiger Aufruf mit Zeigern(Call by Reference) swap() arbeitet mit Zeigern, die jeweils auf a und b zeigen. Wert speichern Werte tauschen Wert zuweisen a=9 b=1

Zeiger (Pointer) Referenz = besondere Art von Zeiger, die es ermöglicht, es wie ein reguläres Objekt einzusetzen Syntax: Typ &name Bsp.:int x = 10;//normale Variable int &ref = x;//!!Referenzen müssen bei Deklarierung //initialisiert werden!! cout <<ref;//10 (Behandlung wie normale Variable) ref = 20; cout << x;//20 (Da ref auf x referenziert) (Vorstellbar als: Referenz ref ist mit x verbunden. Wenn ich den Wert von ref ändere, ändert sich auch der Wert von x.)