EDV1 - 06FelderPointer Felder, Zeichenketten, Pointer.

Slides:



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

Imperative Programmierung
Funktionen, Felder und Parameter-übergabe
der Universität Oldenburg
der Universität Oldenburg
Sequentielle Liste - Array
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Dynamischer Speicher. Ein Vergleich aus dem täglichen Leben...
Objekte und Arbeitsspeicher
FOR Anweisung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
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
Imperative Programmierung
Diskrete Mathematik I Vorlesung Arrays-
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
EDV1 - Komplexe Datentypen
Einführung in C EDV1 - 03C-Einführung.
Portierung von Java nach C
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++
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Einführung in C EDV1 - 04C-Einführung.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
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 Informatik für Naturwissenschaftler und Ingenieure
O.Univ.-Prof. Dr. Dimitris Karagiannis Datenbanken administrieren mit phpMyAdmin Martin Marinschek
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.
Die Zählschleife int s = 0 for (int k=1; k
Informatik 1 Letzte Übung.
Technische Informatik Reihungen – Felder - Arrays.
Arduino Kurs Abend 2.
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
© 2004 Pohlig - Taulien Explizite Typenumwandlung.
Arrays und ArrayLists In JAVA.
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
Programmieren in C Grundlagen C 2
Informatik II Grundlagen der Programmierung Programmieren in C Ausflug printf() Hochschule Fulda – FB ET Sommersemester 2014
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Arrays und ArrayLists In JAVA.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Übersicht Nachtrag zu Ausdrücken
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
COBOL Präsentation im Rahmen des Seminars „Programmiersprachen“
Sammlungsklassen Array.
Diskrete Mathematik I Vorlesung 2 Arrays.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen 1 SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Felder (Arrays).
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
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.
ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.
Aufgaben zu Rückgabewerten
Wiederholungen mit Zähler
Felder in Java.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Felder in der Informatik
Schleifen Datenfelder (Arrays) Verzweigungen
Explizite Typenumwandlung
 Präsentation transkript:

EDV1 - 06FelderPointer Felder, Zeichenketten, Pointer

EDV1 - 06FelderPointer 2 Felder Allgemeine Deklaration: [dim1][dim2]...[dimn] : Type des Feldelements : Name des Feldes : Anzahl der Feldelement in der i-ten Dimension Indizes laufen von 0 bis dimi-1 (wie in JAVA) Aufruf eines Feldelements : name[i1]...[in] (wie in JAVA) Speicherung der Feldelemente zeilenweise ohne Unterbrechung Unterschiede zu JAVA –Mehrdimensionale Felder sind keine Felder von Feldern. Es gibt also echte mehrdimensionale Felder. –Felder wissen nicht wie groß sie sind. Man muss sich die Länge eines Feldes also merken.

EDV1 - 06FelderPointer 3 Beispiel für Felder Monatsmitteltemperatur float temperatur[31]; float monatsmittel=0; int i; for (i=0;i<31;i++) monatsmittel+=temperatur[i]; monatsmittel/=31; Jahresmitteltemperaturen float temperatur[12][31]; int tage[12]={31,28,31,30,31,30,31,31,30,31,30,31}; float jahresmittel=0.0; int t, m; for(m=0;m<12;m++) for(t=0;t<tage[m];t++) jahresmittel+=temperatur[m][t]; jahresmittel/=365;

EDV1 - 06FelderPointer 4 Zeichenketten Es gibt keinen extra Typ für Zeichenketten. Zeichenketten sind Felder von char -Elementen. Das Ende einer Zeichenkette wird durch das Zeichen '\0' gekennzeichnet. Die Länge des Feldes muss also immer um eins größer sein als die längste zu speichernde Zeichenkette. Achtung: Alle Zeichenkettenfunktionen arbeiten immer bis zum nächsten 0-Zeichen. Z.B.: Zeichenkette der maximalen Länge 26. char zeichenkette[27]; zeichenkette="Das ist eine Zeichenkette."; Es existieren diverse Funktionen für die Manipulation von Zeichenketten. Z.B: strcasecmp, strcat, strchr, strcmp, strcpy, strlen, strstr

EDV1 - 06FelderPointer 5 Pointer Für die Nutzung von dynamischen und flexiblen Datenstrukturen sind Pointer erforderlich. Pointer enthalten nicht den Wert einer Variablen sondern deren Adresse. Die Länge von Pointern ist systemabhängig. Pointer sind typgebunden, d.h. sie zeigen immer auf Variablen eines bestimmten Typs. Allgemeine Form der Vereinbarung: * ; ist der Typ auf den der Pointer zeigt " *" ist der Typ der Variablen Mit dem Operator "&" wird die Adresse einer Variablen berechnet. Mit dem Operator "*" wird der Pointer dereferenziert, d.h. man erhält die Variable auf die der Pointer zeigt. "*" und "&" sind inverse Operatoren, d.h. *&name == &*name == name

EDV1 - 06FelderPointer 6 Beispiel: int j=77; int *i; i=&j; *i=88; Wirkung: Variable j wird definiert bekommt den Wert 77 Variable i wird definiert als Pointer auf int i wird die Adresse von j zugewiesen j wird der Wert 88 zugewiesen

EDV1 - 06FelderPointer 7 Beispiel int main() { int j=77; int *i; i=&j; printf("j = %i; i = %u; &i = %u; *i = %i\n",j,i,&i,*i); *i=88; printf("j = %i; i = %u; &i = %u; *i = %i\n",j,i,&i,*i); } Ausgabe: j = 77; i = ; &i = ; *i = 77; j = 88; i = ; &i = ; *i = 88;

EDV1 - 06FelderPointer 8 Parameterübergabe Wesentliche Anwendung von Pointern bei der Übergabe von Parametern. Standardmäßig werden Parameter immer by value übergeben, d.h. kopiert. Ausweg: Die Prozedur erwartet Pointer auf die eigentlichen Parameter und beim Aufruf werden die Adressen der Parameter übergeben. Beispiel: void set(int *i) { *i=77; } int main() { int k; set(&k); }

EDV1 - 06FelderPointer 9 Beispiel void tausch(int *i, int *j) { int h=*i; *i=*j; *j=h; } int main() { int i=111, j=222; printf("i = %i; j = %i\n,i,j); tausch(&i, &j); printf("i = %i; j = %i\n,i,j); } Ausgabe: i = 111; j = 222; i = 222; j = 111;

EDV1 - 06FelderPointer 10 Rechnen mit Pointern Mit Pointern kann gerechnet werden. Mögliche Operationen: +, -, ++, -- Dabei wird immer um Längeneinheiten der Elementtypen verändert. D.h. dass der Pointer nach der Operation wieder auf ein Adresse zeigt, die ein Element vom gleichen Elementtyp enthält. Beispiel: int i; int *p = &i; int *q = p++; q==p+sizeof(int)

EDV1 - 06FelderPointer 11 Pointer und Felder Die Feldvariable stellt einen Zeiger auf das erste Feldelement dar. D.h. für [dim1][dim2]...[dimn] gilt: – ==& [0][0]...[0] –* == [0][0]...[0] Jahresmitteltemperaturen float temperatur[12][31]; float *tt; int tage[12]={31,28,31,30,31,30,31,31,30,31,30,31}; float jahresmittel=0.0; int t, m; for(m=0;m<12;m++) { tt=&temperatur[m][0]; for(t=0;t<tage[m];t++) jahresmittel+=*tt++; } jahresmittel/=365;

EDV1 - 06FelderPointer 12 Dynamische Speicherverwaltung Wenn bei der Programmierung noch nicht klar ist wie viel Speicher in einem Programm benötigt wird, muss der Speicher dynamisch verwaltet werden. Dazu existieren folgende Funktionen: –void malloc(int AnzahlBytes) : reserviert AnzahlBytes Speicher in Bytes –void calloc(int AnzahlElement,int ElementLaenge) : reserviert AnzahlElement* ElementLaenge in Bytes –void realloc(void AlteAdresse,int AnzahlElement) : vergrößert den reservierten Speicherbereich auf AnzahlElement und kopiert die alten Daten in das neue Feld –free(void Adresse) : gibt den Speicherbereich wieder frei Falls bei malloc, calloc oder realloc nicht genügend Speicher frei war, wird NULL als Wert ausgegeben. Um die Pointer typgerecht zuzuweisen muss der Aufruf von malloc, calloc oder realloc gecastet werden. Z.B.: intfeld = (int *)calloc(1000,sizeof(int));

EDV1 - 06FelderPointer 13 Beispiel int *feld1; float *feld2; feld1 = (int *)malloc(1000*sizeof(int)); if (feld1 == NULL) { printf("feld1 konnte nicht allociert werden!"); exit(1); } feld2 = (float *)malloc(1000,sizeof(float)); if (feld2 == NULL) { printf("feld2 konnte nicht allociert werden!"); exit(1); }

EDV1 - 06FelderPointer 14 feld2 = (float *)realloc(feld2,2000); if (feld2 == NULL) { printf("feld2 konnte nicht vergroessert werden!"); exit(1); } free(feld1); free(feld2);