1 Statische Felder. Hinweise zur Speicherung von Feldern in C++ und C
|
|
- Otto Holzmann
- vor 5 Jahren
- Abrufe
Transkript
1 TU Ilmenau, Institut für Mathematik FG Numerische Mathematik und Informationsverarbeitung PD Dr. rer. nat. habil. W.Neunrf Datei: C FELDER.TEX Hinweise zur Speicherung von Feldern in C++ und C Es soll jech noch einmal in übersichtlicher Form die Deklaration, Definition und Verarbeitung von Feldern unter verschiedenen Aspekten dargestellt werden. Das betrifft nicht nur die Unterschiede zwischen den Sprachdialekten C++ und C, sondern auch die Verwendung von statischen und dynamischen Strukturen. Zunächst noch einmal die Zuordnung von einigen Objekten und Standardbezeichnern zu Header-Files. C++ #include <iostream.h> // fuer Objekte wie // cin, cout,... // getch, printf, scanf, stdin,... // EXIT_FAILURE,... #include <stdio.h> C //#include <iostream.h> //getch, printf, scanf,... #include <stdio.h> // koennen sonst entfallen // muss entfallen // falls mathematische Standardfunktionen auftreten werden automatisch erkannt // fuer Objekte wie // EXIT_FAILURE,... // stdin, stderr, stut,... // stdin,... enthaelt Header-File stdio.h 1 Statische Felder Statische bzw. nichtdynamische Felder (Array) sind hintereinander abgelegte Objekte gleichen Datentyps. Hier muss die Anzahl der Dimensionen und Elemente in einem Feld bei seiner Deklaration (also zur Programmierzeit) angegeben werden. Die Anwendung des Indizierungsoperators auf den Feldnamen ist nur deshalb möglich, weil der Compiler den Feldnamen in Anweisungen als Zeiger auf das erste Element de Feldes ansieht. Die Indizierung wird intern in die Zeigerberechnung umgewandelt. Eindimensionales Feld: feld[i] *(feld+i), i=0,1,2,... Zeigerarithmetik bedeutet, dass der Wert eines Zeigers bei der Addition oder Subtraktion nicht in Einheiten von Bytes, sondern in Einheiten von der Größe der Objekte, auf die der Zeiger zeigt, erhöht oder vermindert wird. Die gezeigten Programme arbeiten mit einem zweidimensionalen Feld. Es sind verschiedene Möglichkeiten der Deklaration der Anzahl der Elemente in den beiden Dimensionen gezeigt. Von diesem maximalen Feld wird in Abhängigkeit von der eingegebenen Zeilen- und Spaltenzahl nur ein Teil genutzt. Würden diese beiden Angaben (oder auch nur eine davon) die vereinbarte obere Grenze übersteigen, kommt es i. Allg. irgendwann während der Programmabarbeitung zu einer Fehlermeldung, in C++ eher als in C. a1stat.exe hat Fehler verursacht und wird geschlossen. Starten Sie das Programm neu. Ein Fehlerprotokoll wird erstellt. 1
2 C++ // a1stat.cpp // Felder: statisch #include <iostream.h> //#define nmax 50 const int nmax=50; // bzw. int nmax=50; uble A[nmax][nmax],sum,max; int n,m,i,j; cout<<"zeilensummennorm einer max. (50,50)-Matrix\n\n"; cout<<"eingabe Zeilenzahl n (0<n<=50): "; cin>>n; while ((n<=0) (n>50)); cout<<"eingabe Spaltenzahl m (0<m<=50): "; cin>>m; while ((m<=0) (m>50)); cout<<"a["<<i<<","<<j<<"] = "; cin>>a[i][j]; cout<<"\nzeilensummennorm = "<<max; C // a1stat.c // Felder: statisch //#include <iostream.h> //#define nmax 50 const int nmax=50; // bzw. int nmax=50; uble A[nmax][nmax],sum,max; int n,m,i,j; char ret; printf("zeilensummennorm einer max. (50,50)-Matrix\n\n"); printf("eingabe Zeilenzahl n (0<n<=50): "); scanf("%i",&n); while ((n<=0) (n>50)); 2
3 printf("eingabe Spaltenzahl m (0<m<=50): "); scanf("%i",&m); while ((m<=0) (m>50)); printf("a[%i,%i] = ",i,j); scanf("%lf",&a[i][j]); printf("\nzeilensummennorm = %lf",max); // Tastaturpuffer leeren fflush(stdin); // stdin in stdio.h bzw. conio.h // anstelle von getch() Eingabe- und Ergebnisfenster zu a1stat.c C:\d\Neunrf\nwptexte\tech phy\05\cpp gpp gcc\a1stat.exe Zeilensummennorm einer max. (50,50)-Matrix Eingabe Zeilenzahl n (0<n<=50): 2 Eingabe Spaltenzahl m (0<m<=50): 5 A[0,0] = 1 A[0,1] = 2 A[0,2] = 3 A[0,3] = -1 A[0,4] = -2 A[1,0] = 4 A[1,1] = 5 A[1,2] = 6 A[1,3] = 0 A[1,4] = -1 Zeilensummennorm =
4 2 Dynamische Felder Dynamische Felder (Array) sind ebenfalls Objekte gleichen Datentyps. Hier muss die Anzahl der Dimensionen und Elemente in einem Feld erst zur Laufzeit des Programms feststehen und kann sich daher den aktuellen Gegegebenheiten anpassen. Die dynamische Reservierung von Feldern ist mit der Verwendung von Zeigern verbunden. Die Anwendung des Indizierungsoperators auf den Feldnamen ist deshalb möglich, weil der Compiler den Feldnamen in Anweisungen als Zeiger auf das erste Element de Feldes ansieht. Die Indizierung und Zeigerberechnung sind ineinander umwandelbar. Die dynamische Speicherallokation mittels den Zeiger reserviert den gewünschten Speicherplatz, der dann üblicherweise auch wieder freizugeben ist, bevor der Zeiger nicht mehr genutzt, ungültig oder umgelenkt wird (Vermeidung von so genannten Speicherlecks). Speicherallokation Speicherfreigabe C++ new delete C++/C malloc() free() In der Zeigerprogrammierung sind u. a. wichtig die Deklaration von Zeigern mit dem bestimmten Datentyp, generische Zeiger (void) ohne Typbezogenheit, explizite Typumwandlung bei Zeigern, Zeiger und Felder, Zeigerarithmetik und Zeiger auf Zeiger. Die Typumwandlung bei Zeigern ist in den Projekten gauss4c,..., gauss4cpp2 zum Gauß-Algorithmus und speziell in der Funktion lamatrixneu_ schon mehrfach verwendet worden. Am Beispiel eines zweidimensionalen Felds (rechteckige Matrix) sollen einige Aspekte demonstriert werden. Halbdynamische Felder Zunächst soll speicherplatzsparend dadurch gearbeitet werden, dass bei fester maximaler Matrixzeile mit spmax Elementen (=Spalten) die Anzahl der Zeilen in Abhängigkeit von der aktuell eingegebenen Größe n festgelegt wird. Für die Matrixelemente braucht man dann n*spmax Speicherplatz von gegebenem Elementtyp (hier uble). Dazu kommt noch Speicherplatz für etwas Adressverwaltung. C++ Das ist die kurze und elegante Version unter Verwendung eines Zeigervektors (Vektor von Zeigern). Damit liegen die Matrixzeilen im Speicher genau hintereinander und es ist A[i] = *(A+i). Die Matrixelemente können mittels A[i][j] oder *(*(A+i)+j) aufgerufen werden. // a1hdyn1.cpp // Felder: halbdynamisch, Zeigervektor, new-delete #include <iostream.h> 4
5 //#define spmax 50 const int spmax=50; typedef uble vektor[spmax]; // maximale Spaltenzahl // Typ des Zeilenvektors uble max,sum; cout<<"zeilensummennorm einer (n,m)-matrix, m<=50\n\n"; cout<<"eingabe Zeilenzahl n (0<n): "; cin>>n; while (n<=0); cout<<"eingabe Spaltenzahl m (0<m<=50): "; cin>>m; while ((m<=0) (m>50));, damit A[i] = *(A+i) vektor *A = new vektor[n]; // n beliebig cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; cout<<"\nzeilensummennorm = "<<max; delete []A; C Verwendung des Zeigervektors. Ein Feld von Zeigern (Zeigerfeld) auf den Datentyp T wird als T *ptr[anzahl] deklariert. Dies ist nicht mit einem Zeiger auf ein Feld vom Typ T gemäß T (*ptr)[anzahl] zu verwechseln. Da die Deklaration des Zeigerfelds mit einer festen Feldgrenze erfolgen muss, gibt man rt eine maximale obere Schranke an. Die eingegebene Anzahl der Zeilen sollte dann nicht größer als diese Schranke sein. Die Dynamik der Allokation von Speicherplatz für die Matrixzeilen besteht dann darin, dass man nur Platz für die gewünschten Zeilen allokiert. Ist die eingegebene Zeilenzahl größer als die Schranke, wird es i. Allg. während der Programmabarbeitung zur Fehlermeldung und damit zum Abbruch kommen. Programmfehler a1stat.exe hat Fehler verursacht und wird geschlossen. Starten Sie das Programm neu. Ein Fehlerprotokoll wird erstellt. Damit ist die dynamische Speicherverwaltung bezüglich der Zeilen nicht vollständig machbar. 5
6 // a1hdyn1.c // Felder: halbdynamisch mit Kontrolle, Zeigervektor, malloc-free //#define spmax 50 //#define zemax 50 const int spmax=50; const int zemax=50; typedef uble vektor[spmax]; uble *A[zemax]; // maximale Spaltenzahl // maximale Zeilenzahl // Typ des Zeilenvektors // Feld (Vektor) von Zeigern uble max,sum; char ret; printf("zeilensummennorm einer (n,m)-matrix, n,m<=50\n\n"); printf("eingabe Zeilenzahl n (0<n<=50): "); scanf("%i",&n); while ((n<=0) (n>50)); printf("eingabe Spaltenzahl m (0<m<=50): "); scanf("%i",&m); while (m<=0 m>50); //if ((*(A+i) = (uble*) malloc(sizeof(vektor)))==null) if ((A[i] = (uble*) malloc(sizeof(vektor)))==null) // analog printf("a[%i,%i] = ",i,j); scanf("%lf",&a[i][j]); // sum=sum+fabs(*(*(a+i)+j)); printf("\nzeilensummennorm = %lf",max); fflush(stdin); for (i=0;i<n;i++) free(*(a+i)); Nun soll ein Zeiger auf Zeiger genutzt werden. Dabei erkennt man, was notwendig wäre, um auch in der Spaltendimension dynamisch zu werden. Man braucht die Reservierung der Matrixzeilen nur mit der eingelesenen Länge m anstelle von spmax zu machen. 6
7 // a1hdyn2.c // Felder: halbdynamisch mit Kontrolle, Zeiger auf Zeiger, malloc-free //#define spmax 50 const int spmax=50; typedef uble vektor[spmax]; uble **A; // maximale Spaltenzahl // Typ des Zeilenvektors uble max,sum; char ret; printf("zeilensummennorm einer (n,m)-matrix, m<=50\n\n"); printf("eingabe Zeilenzahl n (0<n): "); scanf("%i",&n); while (n<=0); printf("eingabe Spaltenzahl m (0<m<=50): "); scanf("%i",&m); while ((m<=0) (m>50)); if ((A = (uble**) malloc(n*sizeof(uble*)))==null) // if ((*(A+i) = (uble*) malloc(spmax*sizeof(uble)))==null) // analog if ((*(A+i) = (uble*) malloc(sizeof(vektor)))==null) printf("a[%i,%i] = ",i,j); scanf("%lf",&a[i][j]); printf("\nzeilensummennorm = %lf",max); fflush(stdin); free(*(a+i)); free(a); 7
8 Dynamische Felder Verwendung des Konzepts Zeiger auf Zeiger für beide Sprachdialekte. C++ 4 Programmversionen // a1dyn1.cpp // Felder: dynamisch, Zeiger auf Zeiger, new-delete #include <iostream.h> typedef uble **matrix; // Typ der Matrix matrix A; // uble **A; // einfache Schreibweise uble max,sum; cout<<"zeilensummennorm einer (n,m)-matrix\n\n"; cout<<"eingabe Zeilenzahl n (0<n): "; cin>>n; while (n<=0); cout<<"eingabe Spaltenzahl m (0<m): "; cin>>m; while (m<=0); // mit Umtypisierung // einfache Variante a1dyn2.cpp (char*)a = new char[n*sizeof(uble*)]; // A = new uble*[n]; *(A+i) = new uble[m]; cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; cout<<"\nzeilensummennorm = "<<max; delete [](*(A+i)); delete [](char*)a; // einfache Variante a1dyn2.cpp // delete []A; /* */ 8
9 // a1dyn3.cpp // Felder: dynamisch mit Kontrolle, Zeiger auf Zeiger, new-delete #include <iostream.h> typedef uble **matrix; // Typ der Matrix matrix A; // uble **A; // einfache Schreibweise uble max,sum; cout<<"zeilensummennorm einer (n,m)-matrix\n\n"; cout<<"eingabe Zeilenzahl n (0<n): "; cin>>n; while (n<=0); cout<<"eingabe Spaltenzahl m (0<m): "; cin>>m; while (m<=0); // Fehlermeldung? // ev. "Nicht genuegend virtueller Speicher, // Auslagerungsdatei vergroessern,..." if ((A = new uble*[n])==null) if ((*(A+i) = new uble[m])==null) cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; cout<<"\nzeilensummennorm = "<<max; delete [](*(A+i)); delete [](char*)a; /* */ 9
10 // a1dyn4.cpp // Felder: dynamisch mit Kontrolle, Zeiger auf Zeiger, malloc-free //#include <iostream.h> typedef uble **matrix; // Typ der Matrix matrix A; // uble **A; // einfache Schreibweise uble max,sum; char ret; printf("zeilensummennorm einer (n,m)-matrix\n\n"); printf("eingabe Zeilenzahl n (0<n): "); scanf("%i",&n); while (n<=0); printf("eingabe Spaltenzahl m (0<m): "); scanf("%i",&m); while (m<=0); if (((void*)a = malloc(n*sizeof(uble*)))==null) if (((void*)(*(a+i)) = malloc(m*sizeof(uble)))==null) printf("a[%i,%i] = ",i,j); scanf("%lf",&a[i][j]); printf("\nzeilensummennorm = %lf",max); fflush(stdin); free(*(a+i)); free(a); Die Analogie zur Version a1dyn4.cpp ohne den generischen Zeiger void* gibt es auch in C. 10
11 C // a1dyn4.c // Felder: dynamisch mit Kontrolle, Zeiger auf Zeiger, malloc-free typedef uble **matrix; // Typ der Matrix matrix A; // uble **A; // einfache Schreibweise uble max,sum; char ret; printf("zeilensummennorm einer (n,m)-matrix\n\n"); printf("eingabe Zeilenzahl n (0<n): "); scanf("%i",&n); while (n<=0); printf("eingabe Spaltenzahl m (0<m): "); scanf("%i",&m); while (m<=0); // Fehlermeldung? // ev. "Nicht genuegend virtueller Speicher, // Auslagerungsdatei vergroessern,..." if ((A = malloc(n*sizeof(uble*)))==null) if ((*(A+i) = malloc(m*sizeof(uble)))==null) printf("a[%i,%i] = ",i,j); scanf("%lf",&a[i][j]); printf("\nzeilensummennorm = %lf",max); fflush(stdin); free(*(a+i)); free(a); 11
F 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 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
MehrGI Vektoren
Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung
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
MehrDas folgende Programm demonstriert, wie man Speicheradressen von Variablen ermittelt.
Kapitel 8 Zeiger (Pointer) Bislang war beim Zugriff auf eine Variable nur ihr Inhalt von Interesse. Dabei war es unwichtig, wo (an welcher Speicheradresse) der Inhalt abgelegt wurde. Ein neuer Variablentyp,
MehrDynamischer Speicher
In diesem Abschnitt werden (1) Felder fester Länge und Dynamischer Speicher (2) Felder mit variabler Länge, die sich erst zu Laufzeit des Programms ergibt gegenübergestellt Für (2) benötigt man Funktionen
MehrProgrammieren in C/C++ und MATLAB
Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11
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)
MehrInhalt. Peter Sobe 63. Felder in C
Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Streuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Pointern
MehrFelder fester Länge (1)
Felder fester Länge (1) Felder: Aneinanderreihung von mehreren Variablen gleichen Typs Ursprünglich als 1-dimensionale Organisationsform gedacht, aber auch zwei- und höherdimensional (Matrizen u.ä.) Benutzung
MehrFelder (1) Allgemeines
Felder (1) Allgemeines Gleichartige Daten, wie Tabelle von Zahlen, Datumswerten, Namen etc. Felder (engl. Array) stellen einen Verbundtyp dar, in dem mehrere Daten desselben Typs gespeichert werden Oft
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
MehrFelder in C. Felder stellen eine Reihung von Elementen gleichen Typs dar. Man spricht auch von Vektoren oder Arrays.
Felder in C Felder stellen eine Reihung von Elementen gleichen Typs dar. Man spricht auch von Vektoren oder Arrays. Durch die Reihung (hintereinander speichern) kann ein Element über seine Nummer (Index)
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,
MehrÜbungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
MehrC- Kurs 07 Höhere Datentypen
C- Kurs 07 Höhere Datentypen Dipl.- Inf. Jörn Hoffmann jhoffmann@informa?k.uni- leipzig.de Universität Leipzig Ins?tut für Informa?k Technische Informa?k Höhere Datentypen Überblick Höhere Datentypen Werden
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)
MehrC/C++-Programmierung
1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung
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
MehrDr. Monika Meiler. Inhalt
Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11
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,
MehrProgrammierkurs C++ Datenstrukturen Seite 1
Programmierkurs C++ Datenstrukturen Seite 1 3 Datenstrukturen 3.1 Arrays Zur Wiederholung als Strukturelement der Programmierung gehört auf der Seite der Datenstrukturen die Liste. Eine Liste kann auf
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
MehrÜbungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
MehrInformatik. Wiederholung Felder (Arrays), string. Vorlesung
Informatik Vorlesung 04 Wiederholung Felder (Arrays), string 19. November 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Ein C++ Programm: Wiederholung #include
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
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
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
MehrEinführung in die Programmierung Wintersemester 2014/15
Einführung in die Programmierung Wintersemester 2014/15 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Zeiger Inhalt Zeiger Zeigerarithmetik Zeiger für
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
MehrZeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch
darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten
MehrZeiger: Der Adressoperator &
Zeiger: Der Adressoperator & Variablen werden im Computer im Speicher abgelegt. Nach der Deklaration int a,b,c; double x,y,z; Sieht die Speicherbelegung etwa wie folgt aus: a b c x y z Jede Variable hat
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
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
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
Mehrfile:///h:/dokumente/_fh/ ws /etinfoii/vorlesung/infoi...
3.2 Doppelzeiger Wie im letzten Kapitel erläutert, sind Doppelzeiger Zeiger, die auf einen weiteren Zeiger verweisen. Doppelzeiger werden unter anderem dann benötigt, wenn eine Matrix, die sowohl in der
MehrInhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15
Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen
MehrOutline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik
Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik Imperative Programmierung Imperatives Paradigma Ziel: Ablaufbeschreibung
MehrZeiger. Zeiger ist eine Variable deren Wert eine Adresse enthält. Zeiger werden im Programm definiert. int *pmyinteger; Type *PointerName ;
Zeiger & Variable ist ein Speicherort im C++ Programm und hat eine Adresse. Variable - Zugriff auf Variable und/oder Adresse * & Operator liefert die Adresse einer Variablen im Speicher Adresse int myvariable
MehrStrukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors
Strukturen & Math Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen Strukturen und Vektoren 1 #ifndef _STRUCT_VECTOR_ 2 #define _STRUCT_VECTOR_ 3 4 #include 5 #include
MehrStrukturen & Math. Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen
Strukturen & Math Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen 175 Strukturen und Vektoren 1 #ifndef _STRUCT_VECTOR_ 2 #define _STRUCT_VECTOR_ 3 4 #include 5 #include
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
MehrEinführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2010/11 arithmetik für dynamischen Speicher Anwendungen Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU
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)
MehrDatei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni Felder und Zeiger
Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni 2015 Felder und Zeiger 1. Felder 1. Felder werden deklariert und definiert durch die Angabe der Elementanzahl nach dem Feldnamen mit dem Feldoperator
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
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
MehrDr. Monika Meiler. Inhalt
Inhalt 4 Einführung in die Programmiersprache Java (Teil III)... 4-2 4.5 Referenzdatentypen - Felder... 4-2 4.5.1 Eindimensionale Felder - Vektoren... 4-3 4.5.2 Beispiel Sortieren eines Vektors... 4-4
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)
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
MehrNaive Fehlerkontrolle
Motivation Fakt ist: alle Programmierer machen Fehler Code läuft beim ersten Mal nie richtig Naive Fehlerkontrolle Großteil der Entwicklungszeit geht in Fehlersuche Profis unterscheiden sich von Anfängern
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.
MehrStandardbibliotheken. Datentyp bool. Eingaben 2/2. Eingaben 1/2. In C gibt es keinen logischen Datentyp
Datentyp bool Standardbibliotheken Ein- und Ausgabe Vektoren Container In C gibt es keinen logischen Datentyp Abhilfe schafft Interpretation 0 == false 1 == true Das könnte so aussehen: #define false 0
Mehr+ C - Array (Vektoren, Felder)
+ C - Array (Vektoren, Felder) Eindimensionale Arrays Beim Programmieren steht man oft vor dem Problem, ähnliche, zusammengehörige Daten (vom gleichen Datentyp) zu speichern. Wenn man zum Beispiel ein
MehrEntwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben!
Projekt: Artikelverwaltung Seite 1 von 5 Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben! Legen Sie global einen benutzerdefinierten Datentyp artikel an:
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
MehrAuswahlen (Selektionen)
1 Anhang 10.3 Ein/Ausgaben Eingabe mit Prompt (Beispiel) cout ; // Prompt ohne endl cin
MehrPhysische Datenstrukturen
Elementare Datentypen Strukturierte Datentypen Zeiger Seite 1 Einfache Datentypen Datentyp char Verwendung: ASCII-Zeichen Wertebereich: alle darstellbaren Zeichen, 8 bit lange Ganzzahlen im Intervall -128
MehrNachname:... Vorname:... MatrNr.:... Klausur PR2
Nachname:... Vorname:... MatrNr.:... Klausur PR2 HAW-Hamburg, Fakultät Technik und Informatik, Department Informations- und Elektrotechnik Dr. Robert Heß, 6.7.2007 Bearbeitungsdauer: 90 min Hilfsmittel:
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...............................
MehrC++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14
C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung
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)
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
MehrWintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29
Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente
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
MehrProgrammiersprachen Einführung in C
Programmiersprachen Einführung in C Teil 8: Felder und Zeichenketten Prof. Dr. Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3. Variable und Datentypen
MehrVerwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C
Übersicht Funktionen Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion Sinn von Funktionen Wiederverwendung häufig verwendeter nicht banaler Programmteile Wiederverwendung
MehrLösung zur Übungs-Klausur Informatik für allg. Maschinenbau
Aufgabe 1: a) Wodurch werden imperative Programmiersprachen im Vergleich zu deklarativen Sprachen charakterisiert? Imperative Programmiersprachen erfordern, dass die Programme als Folge einzelner Anweisungen
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!
MehrWertebereich und Genauigkeit der Zahlendarstellung
Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden
MehrDr. Monika Meiler. Inhalt
Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-6 5.1.3 Kopieren eindimensionaler Felder... 5-7
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
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
MehrC++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13
C++ Teil 7 Sven Groß 30. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 30. Nov 2015 1 / 13 Themen der letzten Vorlesung Zeiger, Felder (Wdh.) dynamische Speicherverwaltung Sven Groß (IGPM, RWTH Aachen)
Mehrint i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben
Datenfelder (Array) Seite 1 von 7 Bei den bisherigen Programmen wurde für jede verwendete Variable (oder für jedes Objekt) ein eigener Typ und Name vergeben. Die Initialisierung, d.h. die Belegung mit
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
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
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern
MehrProjekt 3 Variablen und Operatoren
Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.
MehrGrundlagen der Objektorientierten Programmierung - Statische Arrays
Statische Arrays Ein Array ist ein Behälter für Datenelemente desselben Typs. Arrays können beliebig viele Dimensionen haben. Die Standardform ist das eindimensionale Array, das man sich in Zeilenform
MehrReihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08
Reihungen Prof. Dr. Christian Böhm In Zusammenarbeit mit Gefei Zhang http://www.dbs.ifi.lmu.de/lehre/nfinfosw WS 07/08 2 Ziele Die Datenstruktur der Reihungen verstehen: mathematisch und im Speicher Grundlegende
Mehr10 Die Programmiersprache C99: Zusammenfassung
10 Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 25. September 2014, 18:40 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
MehrC-Propädeutikum Höhere Datentypen
C-Propädeutikum Höhere Datentypen Dipl.-Inf. Stefan Freitag freitag@uni-leipzig.de Universitätsrechenzentrum Universitätsbibliothek Universität Leipzig basiert auf den Originalfolien von Jörn Hoffmann
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)
Mehr1. Aufgabe (6 Punkte)
Nachname:... Vorname:... MatrNr.:... Klausur PR2 HAW-Hamburg, Fakultät Technik und Informatik, Department Informations- und Elektrotechnik Dr. Robert Heß, 1.2.2008 Bearbeitungsdauer: 90 min Hilfsmittel:
MehrModProg 15-16, Vorl. 8
ModProg 15-16, Vorl. 8 Richard Grzibovski Dec. 9, 2015 1 / 26 Übersicht Übersicht 1 Zeiger: Zusammenfassung 2 void-zeiger 3 Der Operator / die Funktion sizeof 4 Dynamische Felder Speicherreservierung mit
MehrErste Schritte der Programmierung in C
Erste Schritte der Programmierung in C C versus C++ Anatomie von C-Programmen für AVR- Mikrocontroller Unterschiede zwischen C++ und C 1 Grundlegende Unterschiede File-Extensions (Header und Quellcode)
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
MehrReihungen. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang
Reihungen Martin Wirsing in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang http://www.pst.informatik.uni-muenchen.de/lehre/ws0506/infoeinf/ WS 05/06 2 Ziele Die Datenstruktur der Reihungen
MehrC++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
MehrÜBUNGS-BLOCK 7 LÖSUNGEN
ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i
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
MehrGrundzüge der objektorientierten Programmierung
BERGISCHE UNIVERSITÄT GESAMTHOCHSCHULE WUPPERTAL GAUSS-STRASSE 20 42097 WUPPERTAL (Korrespondenzanschrift) 42119 WUPPERTAL (Lieferanschrift) TELEX 8 592 262 bughw TELEFAX (0202) 439-2901 TELEFON (0202)
MehrU3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm
U3 3. Übung U3 3. Übung Besprechung Aufgabe 1 Pointer Register und Ports U3.1 U3-1 Zeiger U3-1 Zeiger 1 Einordnung Konstante: a 0110 0001 Variable: a Zeiger-Variable (Pointer): a char *p = &a; p U3.2 2
Mehr