Software Entwicklung 1

Größe: px
Ab Seite anzeigen:

Download "Software Entwicklung 1"

Transkript

1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern

2 Einführung in C Bieniusa Software Entwicklung 1 2/ 50

3 Warum C in SE1? Meist verwendete Sprache weltweit Viele wichtige Einsatzgebiete: Systemprogrammierung, eingebettete Systeme, Numerik und Simulationen, Hochleistungsrechner Prozedurale Programmiersprache Einblick in Speichermanagement Essentiell, um auch in anderen Sprachen effizienten Code zu schreiben! Wie kann ich eine Speicheradressen direkt ansprechen? Wie werden Objekte / Daten / Arrays im Speicher verwaltet? Konzept: Pointer / Zeiger Gleiche Syntax - unterschiedliche Semantik! Bieniusa Software Entwicklung 1 3/ 50

4 Abgrenzung: C vs. C++ vs. Java Java und C++ sind C-ähnliche Sprachen C++ ist Geschwistersprache von C Erweiterung um Objekt-Orientierung Nicht vollständig kompatibel ( Typsystem) Java betont Plattformunabhängigkeit Java Virtual Machine Als sichere Sprache konzipiert Bieniusa Software Entwicklung 1 4/ 50

5 Hello World! 1 # include <stdio.h> 2 3 /* Hello - World in C */ 4 int main ( void ) // Hauptprogramm 5 { 6 printf (" Hello world!\n"); 7 return 0; 8 } Bieniusa Software Entwicklung 1 5/ 50

6 Dateien in C Programmeinheit besteht aus Quellcode-Datei (.c) und (evtl.) Header-Datei (.h) Getrennte Übersetzung der Quellcode-Dateien in Object-Dateien (.o /.obj) möglich Linker (dt. Binder) fasst Object-Dateien zu ausführbaren Programmen zusammen ( /.exe) Bieniusa Software Entwicklung 1 6/ 50

7 Compile, Link, Execute 0. Präprozessor: Vorverarbeitungsschritt, wird automatisch vom Compiler aufgerufen Präprozessor-Anweisungen sind markiert durch # z.b. Inhalt der mit #include eingebundenen Header-Dateien wird in die zu compilierende Datei kopiert 1. Compiler: ruft den Präprozessor auf Datei foo.c auf und übersetzt in eine Object-Datei foo.o: > clang -c foo.c 2. Linker: fügt mehrere Object-Dateien (foo.o, bar.o, baz.o) zu einem Programm myprog zusammen: > clang foo.o bar.o baz.o -o myprog Dieses kann dann direkt ausgeführt werden: >./myprog Bieniusa Software Entwicklung 1 7/ 50

8 Übersetzung von Programmen Falls das Programm nur aus einer Datei besteht, kann man es in einem Schritt compilieren und linken: > clang foo.c -o foo Name nach -o ist der Name für die ausführbare Datei; clang foo.c erzeugt (aus historischen Gründen) als ausführbares Programm die Datei a.out (bzw. a.exe unter Windows) Bieniusa Software Entwicklung 1 8/ 50

9 Basisdatentypen short, int, long float, double char ganzzahlige Wert Gleitkommawerte Zeichen Wertebereich ist maschinenabhängig Unterscheidung signed vs. unsigned Typen mit fester Größe int8_t, int16_t, int32_t in Header-Datei stdint.h Bieniusa Software Entwicklung 1 9/ 50

10 Boolsche Werte Keine boolschen Werte in C Vergleiche wie i > j und logische Operatoren sind vom Typ int Wert 1, falls sie wahr sind, und 0, andernfalls In Bedingungen (bei if, while, for usw.) bedeutet wahr lediglich von Null verschieden. if (Ausdruck) {...} ist äquivalent zu if ((Ausdruck)!= 0) {...} Bieniusa Software Entwicklung 1 10/ 50

11 Variablen int x; /* Deklaration ohne Initialisierung */ int y = 3; /* Deklaration mit Initialisierung */ Lokale Variablen sollten vor erster Verwendung initialisiert werden! Lesen von uninitialisierten Variablen ist undefiniert Option -Wall beim Compilieren liefert Hinweise Bieniusa Software Entwicklung 1 11/ 50

12 Frage: Was passiert bei der Ausführung dieses Programms? 1 # include <stdio.h> 2 3 int main ( void ) 4 { 5 int y = 0; 6 int x = 3/ y; 7 8 printf (" Hello world!\n"); 9 printf ("%d/n",x); 10 return 0; 11 } Bieniusa Software Entwicklung 1 12/ 50

13 Undefiniertes Verhalten in C Warnung! Permissible undefined behavior ranges from ignoring the situation completely with unpredictable results, to having demons fly out of your nose. Null Pointer Dereferenzierung (Signed) Integer Overflow Lesen von uninitialisierten Variablen Verwendung von Speicher nach Freigabe Quelle: Bieniusa Software Entwicklung 1 13/ 50

14 Funktionen Bieniusa Software Entwicklung 1 14/ 50

15 Rückgabewert und Parameter I Funktionen, die keinen Rückgabewert liefern, haben void als Rückgabetyp. Bei Funktionen, die keine Parameter nehmen, verwenden wir void anstelle der Parameterdeklaration. Enthält eine Funktionsdeklaration keinerlei Parameterinformation, wird angenommen, dass die Funktion beliebig viele Parameter nimmt. Bieniusa Software Entwicklung 1 15/ 50

16 Rückgabewert und Parameter II 1 int f( int x) { 2 return x; 3 } 4 5 int g() { 6 return 8; 7 } 8 9 int h( void ) { 0 return 3; 1 } 2 3 int main ( void ) 4 { 5 g (5) ; 6 f (5) ; 7 h (3) ; 8 return 0; 9 } $ clang noparams.c -o noparams noparams.c:15:8: warning: too many arguments in call to g g(5); ~ ^ noparams.c:17:7: error: too many arguments to function call, expected 0, have 1 h(3); ~ ^ noparams.c:17:1: note: h declared here int h(void) { ^ 1 warning and 1 error generated. Bieniusa Software Entwicklung 1 16/ 50

17 Reihenfolge von Funktionsdefinitionen Eine Funktion muss vor ihrer Verwendung deklariert werden, entweder mit Implementierung oder Funktionsprototyp. 1 # include <stdio.h> 2 3 /* Funktionsprototyp */ 4 double square ( double x); 5 6 int main ( void ) 7 { 8 double x = 2.; 9 printf ("%f %f\n", x, square (x)); 10 return 0; 11 } /* Funktionsdefinition */ 14 double square ( double x) 15 { 16 return x * x; 17 } Bieniusa Software Entwicklung 1 17/ 50

18 Lokale vs. globale Variablen 1 # include <stdio.h> 2 3 int i = 90; /* globale Variable */ 4 5 int main ( void ) 6 { 7 int j = 25; /* lokale Variable */ 8 { 9 int j = 3; /* lokale Variable */ 10 printf ("%d ",j); 11 } 12 printf ("%d ",j); 13 printf ("%d\n",i); 14 return 0; 15 } Bieniusa Software Entwicklung 1 18/ 50

19 Zeiger Bieniusa Software Entwicklung 1 19/ 50

20 Variablen Der Bezeichner erlaubt es, die Variable innerhalb ihres Gültigkeitsbereichs zu verwenden. Der aktuelle Wert kann gelesen oder durch einen anderen Wert ersetzt werden. Der Datentyp bestimmt, welche Werte eine Variable repräsentieren kann. Die Speicheradresse gibt den Ort im Speicher an, wo der Wert abgespeichert wird. Bieniusa Software Entwicklung 1 20/ 50

21 Zeiger Ein Zeiger (engl. pointer) ist ein Wert, der eine Speicheradresse bezeichnet. Ein Zeiger referenziert einen Wert, wenn dieser Wert an der entsprechenden Speicheradresse gespeichert ist. Zeiger können beliebige Datentypen, ja sogar Funktionen referenzieren. Bieniusa Software Entwicklung 1 21/ 50

22 Ermitteln der Adresse 1 # include <stdio.h> 2 3 int main ( void ) { 4 int x = 7; 5 int *y = &x; 6 *y = 10; 7 return 0; 8 } $./a.out Die Adresse von x ist 0x7fff593e77c8 Der Wert von x ist 7 $./a.out Die Adresse von x ist 0x7fff5e7987c8 Der Wert von x ist 7 $./a.out Die Adresse von x ist 0x7fff596117c8 Der Wert von x ist 7 Bieniusa Software Entwicklung 1 22/ 50

23 Deklaration von Zeigern Der Typbezeichner für einen Zeiger auf einen Wert vom Typ t ist t*. int *a, * b; // a und b Zeiger auf int int *y, x ; // y Zeiger und x int int * f, g; // f Zeiger und g int!! Bieniusa Software Entwicklung 1 23/ 50

24 Zuweisung von Zeigern Der Adressoperator & liefert einen Zeiger; d.h. eine Adresse. int x = 42; // x ist ein Integer mit Wert 42 int * p = & x; // p ist ein Zeiger auf x Bieniusa Software Entwicklung 1 24/ 50

25 NULL Der Null-Zeiger ist ein spezieller Wert, der angibt, dass ein Zeiger nicht auf eine gültige Speicheradresse verweist. int * p1 = NULL ; // Null Pointer NULL ist eine Null-Pointer-Konstante. In C99 als Integer-Wert 0 implementiert. Der Adress-Operator & liefert niemals einen Null-Zeiger. Bieniusa Software Entwicklung 1 25/ 50

26 Frage Was ist der Unterschied zwischen einem Null-Zeiger und einem nicht initialisierten Zeiger? Bieniusa Software Entwicklung 1 26/ 50

27 Dereferenzieren von Zeigern Der Wert an Adresse y wird über den Indirektionsoperator *, z.b. *y, gelesen oder auch geschrieben. 1 # import <stdio.h> 2 3 int main ( void ) 4 { 5 int x = 7; 6 int *y = &x; 7 printf (" Die Adresse von x ist %p \n", y); 8 printf (" Der Wert von x ist %d \n", *y); 9 *y = 10; 10 printf (" Der Wert von x ist jetzt % d \ n", x); return 0; 13 } Hinweis: Ein Zeiger vom Typ void* verweist auf Daten unbekannten Typs und kann nicht dereferenziert werden. Bieniusa Software Entwicklung 1 27/ 50

28 Segmentation faults Das Derefenzieren eines Zeigers, der zuvor nicht mit einer gültigen Adresse initialisiert wurde, ist undefiniert. Gefahr: Beliebiger Zugriff auf (geschützten) Speicherbereich Oft: Abbruch mit Segmentation Fault Bieniusa Software Entwicklung 1 28/ 50

29 Parameterübergabe bei Funktionen: Call-by-value void swap1 ( int x, int y) { int temp ; temp = x; /* Speichere den Wert von x in temp */ x = y; /* Speichere den Wert von y in x */ y = temp ; /* Speichere den Wert von temp in xy */ } return ; Bieniusa Software Entwicklung 1 29/ 50

30 Swap der Speicherinhalte 1 # include <stdio.h> 2 # include < stdlib.h> 3 4 void swap2 ( int *x, int * y) 5 { 6 int temp = * x; /* Speichere den Wert an x in temp */ 7 * x = * y; /* Speichere den Wert an y an x */ 8 * y = temp ; /* Speichere den Wert von temp an y */ 9 } int main ( void ) { 12 int a = 86; 13 int b = 42; 14 printf (" Vor swap : a = %d, b = %d \n", a, b); 15 swap2 (&a, &b); 16 printf (" Nach swap : a = %d, b = %d \n", a, b); 17 return 0; 18 } Bieniusa Software Entwicklung 1 30/ 50

31 Funktionen mit mehreren Ergebnissen Beispiel scanf: int i, j; j = scanf ("%d", &i); Rückgabewert: Anzahl der Zeichen, die aus dem Eingabestrom gelesen wurden Ergebnisse des Einlesens wird über Zeiger zurückgegeben Bieniusa Software Entwicklung 1 31/ 50

32 Dynamische Speicherverwaltung Bieniusa Software Entwicklung 1 32/ 50

33 Klassifizierung von Speicherbereichen I Bieniusa Software Entwicklung 1 33/ 50

34 Klassifizierung von Speicherbereichen II Bieniusa Software Entwicklung 1 34/ 50

35 Klassifizierung von Speicherbereichen III Bieniusa Software Entwicklung 1 35/ 50

36 Klassifizierung von Speicherbereichen IV Bieniusa Software Entwicklung 1 36/ 50

37 Klassifizierung von Speicherbereichen V Bieniusa Software Entwicklung 1 37/ 50

38 Dynamische Speicherverwaltung Funktion void *malloc(size_t n) alloziert n Bytes auf dem Heap; liefert Zeiger auf den Beginn des alloziertes Speicherbereichs oder NULL Funktion void free(void *pointer) gibt Speicher wieder frei (verhindert Speicherlecks) Zugriff auf freigegebenen Speicher, mehrmaliges Freigeben des gleichen Speicherbereichs, Zugriff auf nicht-initialisierten Speicher... ist undefiniert! int *p = malloc (10 * sizeof ( int )); if (p == NULL ) {... /* Problembehandlung */ } else { /* Speicherbereich kann verwendet werden */... } /* Freigeben */ free (p); Bieniusa Software Entwicklung 1 38/ 50

39 sizeof - Operator sizeof liefert die jeweils notwendige Größe des Speicherbereichs in Byte Portierbarkeit von Programmen auf verschiedene Systeme 1 # include <stdio.h> 2 3 int main ( void ) { 4 printf (" char : %ld Byte \n", sizeof ( char )); 5 printf (" int : %ld Bytes \n", sizeof ( int )); 6 printf (" long : %ld Bytes \n", sizeof ( long int )); 7 printf (" float : %ld Bytes \n", sizeof ( float )); 8 printf (" double : %ld Bytes \n", sizeof ( double )); 9 return 0; 10 } Bieniusa Software Entwicklung 1 39/ 50

40 Zugriff auf Elemente im allozierten Speicherbereich int *p = malloc (3 * sizeof ( int )); *(p+0) = 1; *(p+1) = 3; *(p+2) = 7; Bieniusa Software Entwicklung 1 40/ 50

41 Arrays Zusammenfassen und Verwalten von verwandten Daten gleichen Typs unter einem Namen. Diese Daten sind angeordnet und können durch einen Index addressiert werden (0, 1,..., n 1). Allokation auf dem Stack: int a [6]; // Array mit Namen a mit 6 Integern int b [6] = {0,0,1,0,0,0}; // Deklaration und Initialisierung Allokation auf dem Heap: int * ar; ar = ( int *) malloc ( sizeof ( int ) * 10) ; if (ar == NULL ) { printf (" Nicht genug Speicher vorhanden."); // Fehler ausgeben exit (1) ; // Programm mit Fehlercode abbrechen } free ( ar); // gibt Speicher wieder frei Bieniusa Software Entwicklung 1 41/ 50

42 Initialisieren von Arrays Der Inhalt von Arrays muss vor dem ersten Lesezugriff initialisiert werden. for ( int i = 0; i < 6; i ++) { a[ i] = 2 * i; } Bieniusa Software Entwicklung 1 42/ 50

43 Zugriff außerhalb der Array-Grenzen /* Weiterfuehrung des Beispiels */ printf ("%d",a [ -1]) ; printf ("%d",a [6]) ; Verhalten ist undefiniert! Bieniusa Software Entwicklung 1 43/ 50

44 Adressarithmetik auf Arrays I Zwischen Arrays und Zeigern besteht in C ein enger Zusammenhang: Jede Operation mit Array-Indizes kann man auch mit Zeigern formulieren. Beispiel: a ist Array mit 6 int-elementen. Im Speicher realisiert als ein Block von 6 aufeinanderfolgenden Elementen. Deklariert man nun eine Variable pa als Zeiger auf einen int-wert: int *pa; dann kann pa auf das Element an Position 0 von a verweisen; pa = &a [0]; pa enthält die Adresse von a[0]. &a[0] ist äquivalent zu a. Bieniusa Software Entwicklung 1 44/ 50

45 Adressarithmetik auf Arrays II Die Zuweisung x = *pa; kopiert den Wert von a[0] nach x. Die Adresse des Elements a[i] ist gegeben durch pa + i; und *(pa + i) liefert den Wert des Elements a[i]. Bieniusa Software Entwicklung 1 45/ 50

46 Arrays sind keine Zeiger-Variablen! Arrays kann man keinen Wert zuweisen; einer Zeiger-Variablen kann man hingegen eine andere Speicheradresse zuweisen. Für Arrays kann man die Größe (in byte) über sizeof ermitteln. Bieniusa Software Entwicklung 1 46/ 50

47 Arrays als Parameter Wird ein Array als Parameter an eine Funktion übergeben, so wird tatsächlich die Adresse des Anfangselements, also ein Zeiger, übergeben. Wie viele Elemente sind in dem Array? Unbekannt! Mitverwalten eines weiteren Parameters mit der Größe Beispiel: Kommandozeilenparameter 1 # include <stdio.h> 2 3 int main ( int argc, char * argv []) 4 { 5 // Ausgabe der Kommandozeilenparameter 6 for ( int i = 0; i < argc ; i ++) { 7 printf (" argv [%d] = %s \n", i, argv [i]); 8 } 9 return 0; 10 } Bieniusa Software Entwicklung 1 47/ 50

48 Präzedenz von * Der Ausdruck *(pa + 1) liefert Bieniusa Software Entwicklung 1 48/ 50

49 Präzedenz von * Der Ausdruck *(pa + 1) liefert den Wert an Adresse pa mit Abstand 1. Der Ausdruck *pa + 1 liefert Bieniusa Software Entwicklung 1 48/ 50

50 Präzedenz von * Der Ausdruck *(pa + 1) liefert den Wert an Adresse pa mit Abstand 1. Der Ausdruck *pa + 1 liefert den Wert an Adresse pa und addiert zu diesem Wert 1. Bieniusa Software Entwicklung 1 48/ 50

51 Variante: calloc Die Variante void *calloc(size_t n, size_t elementsize) alloziert einen Speicherbereich der Größe n elementsize und initialisert ihn mit 0. /* Speicherplatz fuer 200 chars */ char *w = calloc (200, sizeof ( char )); /* Speicherplatz fuer 10 int */ int *p = calloc (10, sizeof ( int )); Bieniusa Software Entwicklung 1 49/ 50

52 Variante: realloc Die Funktion void *realloc(void *pointer, size_t size) erlaubt es, die Größe von Speicherbereichen zu erweitern bzw. zu verkleinern. int *p = ( int *) malloc ( initial_size );... void * tmp = realloc (p, bigger_ size ); if ( tmp!= NULL ) { p = tmp ; /* OK */ } else { /* Problembehandlung */... } Bieniusa Software Entwicklung 1 50/ 50

Funktionen, Zeiger und Arrays in C Software Entwicklung 1

Funktionen, Zeiger und Arrays in C Software Entwicklung 1 Funktionen, Zeiger und Arrays in C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller 1 Funktionen Mit Hilfe von Funktionen kann man (wie mit Prozeduren bzw. Methoden in Java) eine Problemstellung

Mehr

Einführung in die Programmiersprache C Software Entwicklung 1

Einführung in die Programmiersprache C Software Entwicklung 1 Einführung in die Programmiersprache C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Dieses Skript gibt nur einen kleinen Einblick in C. Für eine ausführlichere und vertiefte Darstellung

Mehr

Einführung in die Programmiersprache C Software Entwicklung 1

Einführung in die Programmiersprache C Software Entwicklung 1 Einführung in die Programmiersprache C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Im TIOBE Index (https://www.tiobe.com/tiobe-index/) wurde C zur Programmiersprache des Jahres

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

C- 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

Software Entwicklung 1

Software 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

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen 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

F Zeiger, Felder und Strukturen in C

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

Mehr

C/C++-Programmierung

C/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

Mehr

Crashkurs C++ - Teil 1

Crashkurs 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

Mehr

2. Programmierung in C

2. 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

Dynamische Speicherverwaltung

Dynamische 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

Mehr

Programmierung mit C Zeiger

Programmierung 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

Mehr

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Inhalt. 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

Mehr

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Teil 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

Mehr

Praxis der Programmierung

Praxis der Programmierung Funktionen, Header-Dateien, Pointer Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn 1 Organisatorische Bemerkungen 2 Modul Programmierung Pflichtmodul für BSc INF

Mehr

Praxis der Programmierung

Praxis 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:

Mehr

Dynamische Speicherverwaltung

Dynamische 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

Mehr

Zeiger (engl. Pointer)

Zeiger (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

Mehr

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmieren 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

Mehr

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Teil 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

Mehr

Vorlesung Programmieren

Vorlesung 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

Mehr

U8 7. Übung U8 7. Übung

U8 7. Übung U8 7. Übung U8 7. Übung U8 7. Übung Dynamische Speicherverwaltung Generisches Sortieren Aufgabe 7 U8.1 U8-1 Dynamische Speicherverwaltung U8-1 Dynamische Speicherverwaltung Erzeugen von Feldern der Länge n: mittels:

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einfü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

Mehr

Arrays (Felder/Vektoren)

Arrays (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

Mehr

Advanced Programming in C

Advanced 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

Mehr

Lösungshinweise/-vorschläge zum Übungsblatt 12: Software-Entwicklung 1 (WS 2017/18)

Lösungshinweise/-vorschläge zum Übungsblatt 12: Software-Entwicklung 1 (WS 2017/18) Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 12: Software-Entwicklung 1 (WS 2017/18)

Mehr

Variablen. 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 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!

Mehr

Einführung in die Programmiersprache C

Einfü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

Mehr

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

Zeiger. 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

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Ü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

Mehr

Dynamischer Speicher

Dynamischer 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

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen 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

Mehr

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Typ : void* aktuelle Parameter Pointer von beliebigem Typ 2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben

Mehr

Dynamische Speicherverwaltung

Dynamische 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...............................

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. 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

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

C++ - 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 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.

Mehr

Einführung in die Programmiersprache C

Einfü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

Mehr

Grundlagen der Informatik 11. Zeiger

Grundlagen 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

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 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

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C Marcel Arndt arndt@ins.uni-bonn.de Institut für Numerische Simulation Universität Bonn Der Anfang Ein einfaches Programm, das Hello World! ausgibt: #include

Mehr

C-Kurs 2010 Pointer. 16. September v2.7.3

C-Kurs 2010 Pointer. 16. September v2.7.3 C-Kurs 2010 Pointer Sebastian@Pipping.org 16. September 2010 v2.7.3 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. C-Kurs Mi Konzepte, Syntax,... printf, scanf Next

Mehr

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

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 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

Mehr

2. Programmierung in C

2. 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)

Mehr

Zeiger in C und C++ Zeiger in Java und C/C++

Zeiger 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

Speichermanagement Software Entwicklung 1

Speichermanagement Software Entwicklung 1 Speichermanagement Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Speicher ist eine wichtige Ressource für Softwaresysteme. Viele nicht-funktionale Eigenschaften hängen vom angemessenen

Mehr

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Ü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

Mehr

Einführung in C. EDV1-04C-Einführung 1

Einführung in C. EDV1-04C-Einführung 1 Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags

Mehr

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier Vektoren 105 direct-declarator simple-declarator ( simple-declarator ) function-declarator array-declarator array-declarator direct-declarator [ [ array-qualifier-list ] [ array-size-expression ] ] array-qualifier-list

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

Zeiger und dynamischer Speicher

Zeiger 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

Übungspaket 14 Eindimensionale Arrays

Übungspaket 14 Eindimensionale Arrays Übungspaket 14 Eindimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung eindimensionaler Arrays Kapitel: 33 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff Programmieren in C Funktionen mit Zeigern und Adressen Prof. Dr. Nikolaus Wulff ByValue versus byreferenz C übergibt immer Kopien der Variablen an Funktionen. Es ist nur dann möglich die Werte von Variablen

Mehr

8. Referenzen und Zeiger

8. 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

Mehr

Einführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy

Einfü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

Mehr

Zeiger, Arrays und Strings in C und C++

Zeiger, Arrays und Strings in C und C++ Zeiger, Arrays und Strings in C und 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

Mehr

Probeklausur Name: (c)

Probeklausur 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

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i

Mehr

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhalt. 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

Mehr

Speichermanagement Software Entwicklung 1

Speichermanagement Software Entwicklung 1 Speichermanagement Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Speicher ist eine wichtige Ressource für Softwaresysteme. Viele nicht-funktionale Eigenschaften hängen vom angemessenen

Mehr

Teil 6: Strukturen und Unionen Gliederung

Teil 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

Mehr

4.2 Programmiersprache C

4.2 Programmiersprache C 4.2.1. Elementare Datentypen (signed) int, unsigned int, (signed) short (int), unsigned short (int), (signed) long (int), unsigned long (int) Elementare Datentypen für ganze Zahlen mit oder ohne Vorzeichen.

Mehr

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Informatik 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

Mehr

Dynamische Datentypen

Dynamische Datentypen Dynamische Datentypen Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen 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

Mehr

INE1 Arrays, Zeiger, Datenstrukturen

INE1 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

Mehr

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Bereits 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

Mehr

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Betriebssysteme, 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/

Mehr

C++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15

C++ 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++

Mehr

Einführung in die Programmiersprache C

Einfü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:

Mehr

Computergrundlagen Programmieren in C

Computergrundlagen Programmieren in C Die Compilersprache C Computergrundlagen Programmieren in C Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Geschichte D. M. Ritchie, *1941 1971-73: Entwickelt von

Mehr

Teil 6: Strukturen und Unionen Gliederung

Teil 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

Mehr

Arrays 115. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

Arrays 115. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier Arrays 115 direct-declarator simple-declarator ( simple-declarator ) function-declarator array-declarator array-declarator direct-declarator [ [ array-qualifier-list ] [ array-size-expression ] ] array-qualifier-list

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

Mehr

U3 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. 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

Besprechung Aufgabe 1. Pointer. Register und Ports. SPiC - Ü U3.1

Besprechung Aufgabe 1. Pointer. Register und Ports. SPiC - Ü U3.1 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

Propädeutikum. Dipl.-Inf. Frank Güttler

Propä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

Mehr

2. Programmierung in C

2. 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

Zeiger in C und C++ Zeiger in Java und C/C++

Zeiger 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

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

C++ 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

Mehr

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen Funktionen Funktionen erlauben, dem Programmcode hierarchisch zu strukturieren ein Hauptprogramm steuert dabei die Abfolge von Schritten, die einzelnen Schritte können durch Funktionen realisiert werden

Mehr

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher Arvid Terzibaschian 1 Zusammengesetzte Datentypen 2 Wozu zusammengesetzte Datentypen? Anforderung: Sie sollen ein Kundenverzeichnis

Mehr

6. Zeiger Allgemeines Definition eines Zeigers

6. 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.

Mehr

ESP Tutorium. Studienassistent: Ewald Moitzi. Gruppe 1

ESP Tutorium. Studienassistent: Ewald Moitzi.   Gruppe 1 ESP Tutorium Studienassistent: Ewald Moitzi E-Mail: prog-tutor-ewald@iicm.tugraz.at Gruppe 1 Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); Finde den Fehler 1 char text[5];

Mehr

Zeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss.

Zeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss. EZS-Test Fragen zur Programmiersprache C Fragen entnommen aus SPiC 1 1. Ein Hauptprogramm und eine Interruptbehandlung greifen nebenläufig auf die Variable uint16_t foo zu. Das Hauptprogramm verwendet

Mehr

Übungen zu Systemprogrammierung 1

Übungen zu Systemprogrammierung 1 Übungen zu Systemprogrammierung 1 Ü1-2 Speicherverwaltung Sommersemester 2018 Christian Eichler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl

Mehr

Programmiertechnik 1. Unit 9: Programmiersprache C Zeiger und Felder. Andreas Polze 1

Programmiertechnik 1. Unit 9: Programmiersprache C Zeiger und Felder. Andreas Polze 1 Programmiertechnik 1 Unit 9: Programmiersprache C Zeiger und Felder Andreas Polze 1 Ablauf Heap und Stack Zeiger und Adressen Zeiger und Funktionen (-argumente) Zeiger und Arrays Adreßarithmetik Beispiel:

Mehr

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ 1 Einleitung Vorteile von Java: gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) weitestgehend

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case

Mehr

Einführung in die Programmiersprache C

Einfü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:

Mehr

Arrays. Einleitung. Deklarieren einer Array Variablen

Arrays. Einleitung. Deklarieren einer Array Variablen Arrays Einleitung bisher jede Variable einzeln deklariert: 12 3 14 12 32 32 3 32 5 3 double sum; int count; ÿ Sie können Zweck und Aufbau von Array-Datentypen erklären ÿ Sie können einen Array korrekt

Mehr

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Felder: Motivation Wir können jetzt über Zahlen iterieren: for (int i=0; i

Mehr