Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher
|
|
- Joachim Schneider
- vor 6 Jahren
- Abrufe
Transkript
1 Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher Arvid Terzibaschian 1
2 Zusammengesetzte Datentypen 2
3 Wozu zusammengesetzte Datentypen? Anforderung: Sie sollen ein Kundenverzeichnis anlegen. Für jeden Kunden sollen Kenndaten gespeichert werden: Name Adresse Umsätze der letzten Monate Kundennummer Telefon Wie kann man das Modellieren? 3
4 Wozu zusammengesetzte Datentypen? Anforderung: Sie sollen ein Kundenverzeichnis anlegen. Wie kann man das Modellieren? Ansatz 1: Eine Array-Variable für jedes Feld (für 256 Kunden) Probleme: Zusammengehörigkeit der Variablen nicht sichergestellt Übergabe an Funktionen nur einzeln möglich Andere Möglichkeit? int kundennummer[256]; char *name[256]; char *adresse[256]; Kunde: Name,Adresse, Telefon Umsätze,Kundennummer 4
5 Zusammengesetzte Datentypen: structs Anforderung: Sie sollen ein Kundenverzeichnis anlegen. Lösung: structs erlauben das zusammensetzen von Datentypen zu neuen, komplexeren Datentypen Modellierung mit structs: Kunde: Name,Adresse, Telefon Umsätze,Kundennummer int kundennummer[256]; char *name[256]; char *adresse[256]; struct t_kunde { int kundennummer; char name[64]; char adresse[64]; ; dynamischer String: Platz für 63 Zeichen struct t_kunde kunden[256]; 5
6 Zusammengesetzte Datentypen: structs structs erlauben Zusammensetzen komplexer Datentypen Definition meist außerhalb von Funktionen der Ausdruck struct { definiert immer einen Datentyp: neuer struct-datentyp: struct t_kunde struct t_kunde { int kundennummer; char name[64]; char adresse[64]; ; Elemente des struct-datentyps: Deklaration wie Variablen/Zeiger struct t_kunde kunden[256]; neue (Array-)Variable kunden mit Datentyp struct t_kunde 6
7 struct-datentypen zusammengesetzte Datentypen sind elementares Konzept der Softwareentwicklung bilden Zusammengehörigkeit bestimmter Daten direkt ab erleichtern das Modellieren von komplexen Problemen viele Dinge der Realität können mit zusammengesetzten Datentypen wesentlich besser modelliert werden als durch elementaren Zahlen und Strings == [ ]?? erhöhen die Lesbarkeit und damit Wartbarkeit des Quellcodes z.b. ist eine struct-variable kunden wesentlich aussagekräftiger als ein Array für je Adresse, Telefonnummer 7
8 Arbeiten mit struct-variablen Zugriff auf einzelne Elementvariablen: per Punkte-Operator strcpy(kunde1.name, Bill Gates ); kunde1.kundennummer = 12; Initialisieren von struct-variablen: in Initialwerte in Reihenfolge der struct-elemente angeben Zuweisen von struct-variablen struct kunde_t { int kundennummer; char name[64]; char adresse[64]; ; /*<- neuer Typ */ /* neue Variable: */ struct kunde_t kunde1; struct kunde_t kunde2; Warum einmal strcpy und einmal Bill Gates? struct kunde_t kunde3 = {20, Bill Gates, USA ; strcpy(kunde1.adresse, Zehlendorf ); kunde2 = kunde1; // Kopiert Werte aller Elementvariablen strcpy(kunde1.adresse, Lichtenberg ); Value-Semantik wie bei elementaren Variablen: Kopieren aller Werte Was ergibt printf(kunde2.adresse)? 8
9 struct und Speicher Elemente der struct-variablen liegen hintereinander im Speicher Beispiel: struct kunde_t kunden[3]; struct kunde_t { int kundennummer; char name[64]; char adresse[64]; ; /*<- neuer Typ */ /* neue Variable: */ struct kunde_t kunde1; struct kunde_t kunde2; Adresse Element Größe 0xF000 kunde[0].kundennummer 4 Byte kunde[0] 0xF000+4 kunde[0].name 64 Byte 0xF kunde[0].adresse 64 Byte 0xF kunde[1].kundennummer 4 Byte kunde[1] kunde[1].name 64 Byte kunde[1].adresse 64 Byte 0xF kunde[2].kundennummer 4 Byte kunde[2] kunde[2].name 64 Byte kunde[2].adresse 64 Byte 9
10 struct und Funktionen struct kunde_t { int kundennummer; char name[64]; char adresse[64]; ; /*<- neuer Typ */ Parameter von Funktionen mit struct-datentyp void drucke_kunde(struct kunde_t k) { printf( Name: %s,k.name); printf( Adresse: %s,k.adresse); printf( KdNr: %d,k.kundennummer); Bei Aufruf Call-By-Value-Semantik nur Kopie wird Funktion übergeben Rückgabewerte mit struct-datentyp struct kunde_t neuer_kunde() { kunde_t k = {0, Mustermann, Musterstraße 123 ; return k; 10 auch hier wird Werte-Kopie als Ergebnis zurückgegeben
11 struct und Funktionen struct-parameter werden immer per Call-By-Value übergeben: void drucke_kunde(struct kunde_t k) { printf( Name: %s,k.name); printf( Adresse: %s,k.adresse); printf( KdNr: %d,k.kundennummer); struct kunde_t { int kundennummer; char name[64]; char adresse[64]; ; /*<- neuer Typ */ Folgerungen: int main() { kunde_t k1 = {10, Karl-Heinz, Berlin ; drucke_kunde(k); unnötiges Kopieren von Werten Rechen- und Speicherkosten Funktionen können Werte nicht bearbeiten k1 wird kopiert und dann druck_kunde mit Kopie aufgerufen Alternative: Call-by-Reference-Semantik via struct-zeigern 11
12 struct und Funktionen Call-By-Reference mit struct-zeigern void drucke_kunde(struct kunde_t *k) { printf( Name: %s,k->name); printf( Adresse: %s,k->adresse); printf( KdNr: %d,k->kundennummer); Folgerungen: kein unnötiges kopieren Veränderungen von struct-variablen durch Funktionen möglich Problem: Zeiger können nicht initialisiert sein Programmierer hat volle Verantwortung struct kunde_t { int kundennummer; char name[64]; char adresse[64]; ; /*<- neuer Typ */ Operator -> greift auf Elemente von struct-zeigern zu Achtung: keine Gültigkeitsprüfung (!= NULL) des Zeigers k int main() { kunde_t k1 = {10, Karl-Heinz, Berlin ; drucke_kunde(&k1); struct-zeiger auf Variable k1 wird übergeben 12
13 Einschub: Typedef typedef erlaubt Aliasnamen für Datentypen zu erstellen: struct kunde_t { int kundennummer; char *name; char *adresse; ; typedef struct kunde_t customer; alter Datentyp Aliasname für Datentyp Aliasname customer kann wie struct kunde_t verwendet werden: struct kunde_t kunde1; = customer kunde1; 13
14 struct und Funktionen Erhöhen der Kundennummer mit Call-By-Value typedef struct kunde_t { int kdnr; char name[64]; char adresse[64]; cust; Call-By-Reference (~Pointer) Daten 3x kopiert Daten 0x kopiert cust inc_kundennr(cust c) { c.kdnr++; return c; 2 int main() { cust kunde = {1, Frank, Berlin ; 1 kunde = inc_kundennr(kunde); 3 printf( Nr: %d,kunde.kdnr); void inc_kundennr(cust *c) { c->kdnr++; ; int main() { cust kunde = {1, Frank, Berlin ; inc_kundennr(&kunde); printf( Nr: %d,kunde.kdnr); bei Aufruf der Funktion beim return in der Funktion beim Zuweisen nach der Funktion aber: Compiler kann hier oft optimieren maximale Geschwindigkeit aber: Pointer sind fehleranfälliger 14
15 structs in structs struct-datentypen können andere structs enthalten: struct schueler_t { const char name[64]; int note; ; struct raum_t { int haus; int etage; int nr; ; struct kurs_t { const char lehrer[64]; const char name[64]; struct schueler_t schueler[30]; struct raum_t raum; ; struct kurs_t k; strcpy(k.name, Mathe ); k.raum.haus = 3; k.schueler[1].note = 1; structs können sich nicht selbst enthalten nur als Zeiger für z.b. dynamische Strukturen 15
16 Zusammenfassung struct Bilden zusammengesetzte Datentypen wichtig für Modellierung komplexer Probleme structs können structs enthalten Können als Datentypen für Variablen und Arrays verwendet werden Können als Parameter von Funktionen genutzt werden Call-By-Value-Semantik ohne Zeiger Werte-Kopien Call-By-Reference-Semantik mit Zeigern Adress-übergabe 16
17 Dynamischer Speicher der Heap 17
18 Dynamischer Speicher: Warum? Daten bisher gespeichert in elementaren Variablen Größe und Anzahl der Variablen vorher festgelegt struct-variablen Größe und Anzahl der Variablen vorher festgelegt Arrays und Strings Größe und Anzahl der Arrays/Strings vorher festgelegt Problem: oft Anzahl Elemente/ Speicherplätze erst zur Laufzeit berechenbar max. Größe anzunehmen Speicherverschwendung 18
19 Dynamischer Speicher: Warum? Problem: oft ist Größe der benötigten Datenspeicher vor Laufzeit des Programms nicht bekannt Länge von Arrays und Strings erst zur Laufzeit bestimmbar immer max. Größe anzunehmen ist Speicherverschwendung Lösung: Dynamische Speicherreservierung mit malloc() und free() Speicherreservierung on demand Vorteile: optimale Speichernutzung und dynamische Strukturen Nachteile: komplexere Programmlogik fehleranfälligerer Code Speicherverlust möglich (Memory-Leaks) 19
20 Speicherbereiche eines Programms gesamter Speicher des Programmes. Vom Betriebssystem zugewiesen 20 Programm-Stack: wird automatisch verwaltet alle Variablen Größe und Anzahl der Variablen alle Arrays zur Compile-Time bekannt alle Parameter von Funktionsaufrufen temporäre Werte zur Berechnung Funktionsaufrufsliste (Funktions-Stack) statische Daten konstante Werte z.b. bei Initialisierung von Strings und Variablen statischer Maschinencode kompilierte Anweisungen Inhalt der ausführbaren Maschinencode- Datei Programm-Heap dynamischer Speicherbereich Programm kann Speicher dynamisch vom Was ist das? Betriebssystem anfordern wird durch Programm in C mit malloc() verwaltet kann vom Programm freigegeben werden in C mit free();
21 Dyn. Speicher vom Heap Anforderung: ganze Zahlen von 1 N in Array speichern Größe des Arrays zur Laufzeit nicht bekannt Lösung: Funktion malloc() nutzen, um Speicher für n Elemente zur Laufzeit zur Verfügung zu stellen: Funktion void* malloc(int nbytes); reserviert n Bytes Speicher vom Heap und gibt Anfangsadresse als Zeiger zurück Stack int n = 25; int i; int *nums; nums = malloc(n * sizeof(int)); for(i = 0;i<n;++i { nums[i] = i; statische Daten statischer Code Heap [~RAM] sizeof(datentyp) bestimmt die Größe eines Datentyps in Byte Erinnere: Zeiger kann wie Array betrachtet werden 21
22 Dyn. Speicher vom Heap Funktion malloc() nutzen, um Speicher für n Elemente zur Laufzeit zur Verfügung zu stellen: Funktion void* malloc(int nbytes); reserviert n Bytes Speicher vom Heap und gibt Anfangsadresse als Zeiger zurück Problem: int n = 25; int i; int *nums; nums = malloc(n * sizeof(int)); for(i = 0;i<n;++i { nums[i] = i; Stack statische Daten statischer Code Heap [~RAM] Speicher wird nicht automatisch wieder freigegeben Unterschied zu klassischen Variablen und Arrays (Stackvariablen) Memory-Leaks sind die Folge Lösung: Funktion free() zum Freigeben von Speicher 22
23 Dyn. Speicher vom Heap Speicher alloziieren und wieder freigeben: Speicher für 25 int-werte auf Heap reservieren Werte wie ein Array nutzen Speicher freigeben (optional: Zeiger nums als invalid kennzeichnen) int n = 25; int i; int *nums; nums = malloc(n * sizeof(int)); for(i = 0;i<n;++i { nums[i] = i; free(nums); nums = NULL; Stack statische Daten statischer Code Heap [~RAM] free erwartet Zeiger auf Anfang des Speicherbereichs Programmierer hat volle Verantwortung, free() auch aufzurufen Grundregel: zu jedem malloc() gehört [irgendwann] ein free() 23
24 Speicher vom Heap: Probleme Grundsätzliches Problem: Speicher vom Heap muss Programm verwalten zu jedem malloc() muss irgendwann ein passendes free() aufgerufen werden sonst: Memory-Leaks und Segmentation-Fault Für alle Programmiersprachen gilt: Es gibt keine triviale Lösung zur dynamischen Speicherverwaltung Probleme treten immer dann auf, wenn Speicher zu früh, gar nicht, oder mehrmals freigegeben wird Lösungsansatz: Einsatz von Zeigern und Speicher vom Heap so wenig wie möglich & so viel wie nötig. bei Funktionen Call-By-Value sicherer als Call-By-Pointer bei dynamische Arrays/Strings reichen oft auch temporäre Array-Variablen mit fester Maximallänger Stack statische Daten statischer Code Heap [~RAM] 24
25 Dynamischer Speicher und Zur Erinnerung: Strings = Char-Arrays = Zeiger auf das erste Element dynamische Strings können auch auf dem Heap gespeichert werden Beispiel: char tmp[2048]; printf( Wie geht s? ); fgets(tmp,2048,stdin); printf(tmp); vs char *tmp = malloc(2048*sizeof(char)); printf( Wie geht s? ); fgets(tmp,2048,stdin); printf(tmp); free(tmp); tmp ist char-array-variable Speicher im Stack automatisch gelöscht Nachteil: Stack-Speicher oft begrenzt 25 tmp ist Zeiger Speicher vom Heap mit malloc Nachteil: manuelles löschen mit free pflicht Vorteil: Heap-Speicher viel größer als Stack
26 Dynamischer Speicher und Strukturen Speicher alloziieren und freigeben funktioniert analog zu elementaren Typen: Speicher für 128 Kunden auf Heap reservieren Wie ein Array nutzen Speicher freigeben Gibt es in diesem Beispiel ein Problem? Problem: dynamischer Speicher und Rückgabewert: ohne free: Memory-Leak? typedef struct kunde_t { int kdnr; char name[64]; char adresse[64]; cust; cust* new_database(int n) { int i; cust *kunden; kunden = malloc(n * sizeof(cust)); for(i = 0;i<n;++i) { sprintf(kunden[i].name, Kunde %d,i); free(kunden); return kunden; mit free: Absturz des Programmes 26
27 Dynamischer Speicher und Rückgabewerte Frage der Zuständigkeit Wer gibt den Speicher wieder frei? Nicht trivial zu lösen. cust* create_database(int n) { int i; cust *kunden; kunden = malloc(n * sizeof(cust)); for(i = 0;i<n;++i) { sprintf(kunden[i].name, Kunde %d,i); free(kunden); return kunden; 27 typedef struct kunde_t { int kdnr; char name[64]; char adresse[64]; cust; void delete_database(cust* db) { if(db!= NULL) free(db); möglicher Lösungsansatz : Funktionspaar ähnlich malloc() und free() dynamische Speicherallokationsfunktionen mit create_**** Funktion reserviert Speicher auf Heap und gibt Datenstruktur zurück dynamische Speicherfreigabefunktionen mit delete_***** Funktion löscht Speicherreservierung für bestimmte Datenstruktur Aufrufer der create_* und delete_*-funktionen ist zuständig
28 Zusammenfassung: Dynamischer Speicher Programm kann dynamisch Speicher auf Heap anfordern malloc(n*sizeof(datentyp)) alloziiert Speicher für ein Array mit n Elementen sowohl elementare als auch zusammengesetzte Datentypen erlaubt free(adresse) gibt Speicher wieder frei jedem malloc() sein free() ohne free(): Memory-Leak mehr als ein free(): Programmabsturz dynamische Speicherverwaltung benötigt Zeiger Zeiger = typische Fehlerquelle Programmierer trägt volle Verantwortung für korrekten Programmcode korrektes Arbeiten mit dynamischem Speicher ist niemals trivial! sollte nur bei Alternativlosigkeit eingesetzt werden 28
29 Vielen Dank! Bei Fragen einfach eine Mail an: 29
Praxis der Programmierung
Zusammengesetzte Datentypen, dynamische Speicherverwaltung Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Zusammengesetzte
MehrEinführung in die Programmierung Konstanten, dynamische Datenstrukturen. Arvid Terzibaschian
Einführung in die Programmierung Arvid Terzibaschian 1 Konstanten 2 Motivation Unveränderliche, wichtige Werte mathematische Konstanten z.b. PI String-Konstanten wie z.b. häufige statische Meldungen mögliche
MehrVorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
MehrPraxis der Programmierung
Zusammengesetzte Datentypen, dynamische Speicherverwaltung Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Zusammengesetzte
MehrTeil 6: Strukturen und Unionen Gliederung
Teil 6: Strukturen und Unionen Gliederung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen 6.2 Strukturen Typdefinitionen
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Bisjetzt Beispiel Ranglistenprogramm für Sportveranstaltungen Besser - genaue Anzahl Teilnehmer
MehrF Zeiger, Felder und Strukturen in C
F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts
MehrTeil 6: Strukturen und Unionen Gliederung
Teil 6: Strukturen und Unionen Gliederung Strukturen Typdefinitionen Unionen Dynamische Speicherverwaltung Strukturen 6.2 Strukturen Ursprung in Pascal als Datentyp record, Verbunddatentyp Strukturtyp
MehrC++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue
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.
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
MehrProgrammieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff
Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen
MehrInformatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
MehrINE1 Arrays, Zeiger, Datenstrukturen
INE1 Arrays, Zeiger, Datenstrukturen Arrays Felder von Elementen gleichen Typs Verwenden von Adressen: Zeiger Datenstrukturen mit struct Zeiger auf Datenstrukturen Spezielle Zeiger und komplexe Deklarationen
MehrPraxis der Programmierung
Arrays, Pointer, Parameterbergabe Institut für Informatik und Computational Science Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Arrays (Felder/Vectoren) 2 Arrays: Motivation Gegeben:
MehrGrundlagen der Informatik 11. Zeiger
11. Zeiger Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte Grundlagen der Informatik (Alex Rempel) 1 Motivation Dynamische Speicherverwaltung Oft müssen große
Mehr8. Referenzen und Zeiger
8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen
MehrDynamischer Speicher
Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
MehrC- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?
C- Kurs 08 Dipl.- Inf. Jörn Hoffmann jhoffmann@informa?k.uni- leipzig.de Universität Leipzig Ins?tut für Informa?k Technische Informa?k Überblick Datentyp zur Verwaltung von Adressen (auf Speicherplätze)
MehrPraxis der Programmierung
Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen
MehrC++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18
C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung 1/ 23 Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Dynamische Speicherverwaltung 2/ 23 Gliederung 1 Allgemeines zur Speichernutzung 2 Ziele und Nutzen 3 Anwendung in
MehrEinführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy
Einführung Pointer C-Kurs 2013, 2. Vorlesung Nico nico@freitagsrunde.org Andy andrew@freitagsrunde.org http://wiki.freitagsrunde.org 10. September 2013 This work is licensed under the Creative Commons
MehrInformatik 1 ( ) D-MAVT F2011. Pointer, Structs. Yves Brise Übungsstunde 6
Informatik 1 (251-0832-00) D-MAVT F2011 Pointer, Structs Organisatorisches Übungsstunde 20110413 Da ich abwesend bin, bitte Gruppe von David Tschirky besuchen. Mittwoch, 20110413, 13:15-15:00 Uhr, VAW
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
MehrÜbungspaket 29 Dynamische Speicherverwaltung: malloc() und free()
Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
MehrC++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15
C++ Teil 6 Sven Groß 23. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 23. Nov 2015 1 / 15 Themen der letzten Vorlesung const-deklaration Referenzen Zeiger Felder Sven Groß (IGPM, RWTH Aachen) C++
MehrFunktionen: Rückgabewert
Funktionen: Rückgabewert Jede Funktion in C++ (außer Konstruktoren und Destruktoren siehe später) MUSS einen Rückgabewert-Typ vereinbaren. Gibt sie nichts zurück, muss der Rückgabetyp void sein. Jede return-anweisung
MehrDynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
MehrTeil 5: Zeiger, Felder, Zeichenketten Gliederung
Teil 5: Zeiger, Felder, Zeichenketten Gliederung Zeiger und Adressen Felder (Arrays) Zeichenketten (Strings) Zeigerarithmetik Mehrdimensionale Felder Zeiger und Adressen Felder Zeichenketten Zeigerarithmetik
MehrC++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
Mehr6. Zeiger Allgemeines Definition eines Zeigers
6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.
MehrProbeklausur Name: (c)
Einführung in die Praktische Informatik 30.1.2013 Probeklausur Name: Teil I: Datentypen (20 Punkte) Lösen sie die Probleme, indem sie die korrekten Lösungen ankreuzen bzw. in die vorgesehenen Freiräume
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse
MehrCrashkurs C++ - Teil 1
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
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrK Ergänzungen zur Einführung in C
K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K.1 Zeiger, Felder und Zeichenketten Zeichenketten sind Felder von Einzelzeichen (char), die in der internen Darstellung durch ein \0
MehrC++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16
C++ Teil 5 Sven Groß IGPM, RWTH Aachen 8. Mai 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai 2015 1 / 16 Themen der letzten Vorlesung Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
MehrProgrammierwerkstatt. Arrays, Pointer und Referenzen
Programmierwerkstatt Arrays, Pointer und Referenzen Zum Inhalt Wir wollen Euch: das Wesentliche vermitteln Fehlerquellen verdeutlichen Verständnis ist uns wichtig programming by coincidence vermeiden Themen
MehrInformatik. Strukturen und Aufzählungstypen. Vorlesung
Informatik Vorlesung 06 Strukturen und Aufzählungstypen 03. Dezember 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Datentypen Die bisher benutzten Datentypen waren
MehrZeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.
Zeiger C-Kurs 2012, 2. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 10. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
MehrPropädeutikum. Dipl.-Inf. Frank Güttler
Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik
MehrPraxis der Programmierung
Arrays, Pointerarithmetik, Konstanten, Makros Institut für Informatik und Computational Science Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Arrays (Felder/Vektoren) 2 Arrays: Motivation
MehrVariablen und Parameter
D3kjd3Di38lk323nnm Variablen und Parameter Eine Variable repräsentiert einen Speicherbereich, der einen veränderbaren Wert enthält. Eine Variable kann eine lokale Variable, ein Parameter (value, ref oder
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens mit C++ und Matlab SS2013 Inhalt Bis jetzt: Heute: Entwicklungsumgebung
MehrINE1 Speicherverwaltung und zweidimensionale Arrays. Speicherorganisation Dynamischer Speicher in C Zweidimensionale Arrays
INE1 Speicherverwaltung und zweidimensionale Arrays Speicherorganisation Dynamischer Speicher in C Zweidimensionale Arrays 1 Speicherorganisation in C 2 von 48 Speicherorganisation Anlegen eines Arrays:
MehrBetriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)
Betriebssysteme, Rechnernetze und verteilte Systeme 1 Crashkurs C (2) Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/
MehrEinleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn
C: Funktionen Philip Gawehn Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg Do., 22.05.2014 1 / 23 Gliederung
MehrEinführung in die Programmierung
: Inhalt 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 - mit / ohne Parameter - mit / ohne Rückgabewerte
MehrTeil 5: Felder, Zeiger, Zeigerarithmetik Gliederung
Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung Felder (Arrays) Mehrdimensionale Felder Zeiger und Adressen Zeigerarithmetik Felder Mehrdimensionale Felder Zeiger und Adressen Zeigerarithmetik Felder
MehrVariablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes
Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 2 Arrays und Pointer Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät statische Arrays Deklaration (eindimensional): /* 40
MehrEinführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen ("struct...")
Einführung in die Programmierung für Physiker Die Programmiersprache C Strukturen ("struct...") Marc Wagner Institut für theoretische Physik Johann Wolfgang Goethe-Universität Frankfurt am Main WS 2013/14
MehrEinführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen ("struct...")
Einführung in die Programmierung für Physiker Die Programmiersprache C Strukturen ("struct...") Marc Wagner Institut für theoretische Physik Johann Wolfgang Goethe-Universität Frankfurt am Main WS 2017/18
MehrKapitel 5: Funktionen. Inhalt
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
MehrGrundlagen der Programmiersprache C für Studierende der Naturwissenschaften
Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 7: Matrizen, Vektoren und dynamische Speicherverwaltung Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg
MehrProgrammieren in Java
Ein Projekt 2 Wiederholung: new-operator Werte nicht-primitiver Datentypen müssen mit new erzeugt werden Es gibt keine Möglichkeit primitive Daten mit new zu erzeugen Beispiele int[] myarray = new int[]
Mehreinlesen n > 0? Ausgabe Negative Zahl
1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen
MehrArrays,Strings&Pointer in C/C++
Arrays,Strings&Pointer in C/C++ Vortrag Mathias Reich Am 21.5.2002 Pointer Da zur Zeit der Compelierung des Programms nicht immer der Umfang der zu bearbeitenden Daten feststeht muss man sich - in manchen
MehrInhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)
Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrVorkurs C++ Programmierung
Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrProgrammieren I. Kapitel 12. Referenzen
Programmieren I Kapitel 12. Referenzen Kapitel 12: Referenzen Ziel: Die Wahrheit über Objekte Lebensdauer Speicherverwaltung Parameterübergabemechanismen in Methoden Gleichheiten, Kopien Arrays Speicherbereinigung
MehrEinführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default
MehrEinführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian
Einführung in die Programmierung Arvid Terzibaschian 1 Arrays 2 Arrays: Motivation Gegeben: monatliche Durchschnittstemperaturen der letzten 5 Jahre Gesucht: Mittelwerte für Jahre, Monate, Jahreszeiten,
MehrÜbersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C
Übersicht Speichertypen Speicherverwaltung und -nutzung Speichertypen Beim Laden eines Programms in den Speicher (Programmausführung) kommen 3 verschiedene Speicherbereiche zum Einsatz: Text Segment (Code
MehrOperatoren in C. Gastvorlesung Andreas Textor
Operatoren in C Gastvorlesung - 11.01.10 Andreas Textor andreas.textor@hs-rm.de Terminologie Operand 4 + 2 Operand Operator Unterscheidung nach Anzahl Operanden Unäre, Binäre und Ternäre Operatoren Z.B.:!x;
MehrVisuelle Kryptographie. Anwendung von Zufallszahlen
Visuelle Kryptographie Anwendung von Zufallszahlen Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken, so dass Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken,
MehrÜbungspaket 29 Dynamische Speicherverwaltung: malloc() und free()
Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungsziele: Skript: In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
MehrGrundlagen der OO- Programmierung in C#
Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3
MehrFelder, Zeiger und Adreßrechnung
Felder, Zeiger und Adreßrechnung Felder bestehen aus Variablen eines einzigen Datentyps. Bisher kennen wir eindimensionale Felder. In C sind Felder mit beliebigen Dimensionen möglich. Unsere räumliche
MehrEinführung in die Programmierung Konstanten, dynamische Datenstrukturen. Arvid Terzibaschian
Einführung in die Programmierung Arvid Terzibaschian 1 Konstanten 2 Motivation Unveränderliche, wichtige Werte mathematische Konstanten z.b. PI String-Konstanten wie z.b. häufige statische Meldungen mögliche
MehrJava Referenzdatentypen genauer betrachtet
Informatik 1 für Nebenfachstudierende Grundmodul Java Referenzdatentypen genauer betrachtet Kai-Steffen Hielscher Folienversion: 23. Januar 2018 Informatik 7 Rechnernetze und Kommunikationssysteme Referenzdatentypen
MehrZeiger (engl. Pointer)
Zeiger (engl. Pointer) Zeiger Ein Zeiger (engl. Pointer) speichert eine Adresse, unter der ein Wert im Speicher des Computers gespeichert werden kann. Eine Variable im Gegensatz speichert einen Wert. Der
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher
MehrStrukturen in C. Strukturen stellen eine Zusammenfassung von Datenelementen unterschiedlichen Typs unter einem Namen dar.
Strukturen in C Strukturen stellen eine Zusammenfassung von Datenelementen unterschiedlichen Typs unter einem Namen dar. Dadurch sind sie vergleichbar mit Feldern, die eine Zusammenfassung (Reihung) von
MehrTeil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden
Teil 8: Dynamische Speicherverwaltung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 8 Dynamische Speicherverwaltung... 3 8.1
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................
MehrArrays (Felder/Vektoren)
Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrInformatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5
Informatik 1 (251-0832-00) D-MAVT F2010 Schleifen, Felder Nachbesprechung Blatt 3 Aufgabe 1 ASCII... A > a Vorsicht: Lösen Sie sich von intuitiven Schlussfolgerungen. A ist nicht grösser als a, denn in
MehrEinführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin
Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm
MehrBei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife
303 Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife durchgeführt wird. 304 305 for-schleifen sind in Aktivitätsdiagrammen
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
MehrBereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung
Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 3 Typen und Speicherverwaltung Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur (2) Kernighan and Ritchie, The
MehrPointer und Arrays. INE1, Montag M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.
Pointer und Arrays INE1, Montag M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Variable Speicherplatz Datenwert über Name ansprechbar hat Typ hat Adresse (Speicheradresse)
Mehr9. Vektoren. (auch Felder/array)
9. Vektoren (auch Felder/array) Motivation Hat man mehrere Objekte gleichen Datentyps, so kann man sie explizit deklarieren, wenn die Anzahl bekannt ist double x1,x2,x3,x4; Nachteile: versagt, -wenn die
MehrZeiger in C und C++ Zeiger in Java und C/C++
1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,
MehrDynamisches Speichermanagement
Dynamisches Speichermanagement Proseminar C-Programmierung - Grundlagen und Konzepte Timo Minartz timo.minartz@informatik.uni-hamburg.de Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg
MehrPraxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung"
Praxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung" Christof Elbrechter Neuroinformatics Group, CITEC May 15, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ May 15,
MehrZeiger und dynamischer Speicher
Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: 09.12.2013, 07:49 Uhr
Mehr