informatik ii grundlagen der programmierung programmieren in c funktionen, adressen, zeiger...
TRANSCRIPT
![Page 1: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/1.jpg)
Informatik IIGrundlagen der Programmierung
Programmieren in C
Funktionen, Adressen, Zeiger
Hochschule Fulda – FB ET
Sommersemester 2014
http://c-et.rz.hs-fulda.de
Peter Klingebiel, HS Fulda, DVZ
![Page 2: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/2.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2
Was können wir jetzt? 1
![Page 3: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/3.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3
Was können wir jetzt? 2
![Page 4: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/4.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4
Was können wir jetzt? 3
• einfache Programme bestehend aus main()– und einigen/mehreren/vielen Zeilen C-Code …– mit überschaubaren Aufgabenstellungen …– und überschaubarer Komplexität …– auch wenn schon komplexere Programme hier
und dort schon einmal gezeigt wurden
• doch meist sind die Aufgabenstellungen und damit auch die erforderlichen Programme sehr viel größer und sehr viel komplexer
![Page 5: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/5.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5
Was ist erforderlich? 1
• hohe Komplexität Komplexität reduzieren
• große Programme / Aufgaben in kleinere Programmteile / Teilaufgaben zerlegen
• oft gleiche / ähnliche Aufgabenstellung Wiederverwendbarkeit von Programm- teilen ermöglichen
Konzept von Unterprogrammen / Sub- routinen / Prozeduren / Funktionen
![Page 6: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/6.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6
Was ist erforderlich? 2
• Beispiel: Hausbau in Fertigbauweise
![Page 7: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/7.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7
Was ist erforderlich? 3
• C bietet das Konzept von Funktionen• eine Funktion realisiert eine fest umrissene
Aufgabe bzw. Teilaufgabe• Das hat viele Vorteile: kleinere Teile
– sind einfacher zu verstehen/zu programmieren– können einfacher verändert werden– können einfacher überprüft/getestet werden– sind parallel erstellbar– sind wiederverwendbar– erfüllen eine klar definierte Aufgabe („Funktion“)
![Page 8: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/8.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8
Was ist erforderlich? 4
• größeres Problem in kleinere Teile zerlegt• Erinnerung: Adam Ries123 * 45 123 * 4 * 10 + 123 * 5aus komplexer Multiplikation wird einfache Multiplikation und einfache Addition
• Wir kennen und verwenden Funktionen– main(), printf(), scanf(), sqrt(), …
• sind nicht Teil der Sprache, sondern definiert in der C-Standardbibliothek
• wir können eigene Funktionen schreiben
![Page 9: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/9.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9
Funktionen 1
• Funktionen sind Programmteile (Blöcke) mit einem Typ, einem Namen, ggfs. Parametern (Eingangsdaten) und ggfs. Rückgabewert (Ausgangsdaten)
• elementare Bausteine für Programme– gliedern umfangreiche Aufgaben in kleinere
Komponenten
– reduzieren Komplexität
– Wiederverwendung von Komponenten
– verbergen Details der Implementierung vor anderen Programmteilen (black box)
![Page 10: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/10.jpg)
Funktionen 2
![Page 11: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/11.jpg)
Funktionen 3
![Page 12: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/12.jpg)
Funktionen 4
• C-Programm Daten werden durch die Mühlen von Funktionen geschoben
![Page 13: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/13.jpg)
Funktionen 5
![Page 14: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/14.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14
Funktionen 6
• dienen der Abstraktion• Name und Parameter abstrahieren
– vom tatsächlichen Programmstück– von Darstellung und Verwendung der Daten
• Wiederverwendung– mehrfach benötigte Programmstücke werden
einmal erstellt und können durch Angabe des Funktionsnamens aufgerufen werden
– schrittweise Abstraktion möglichEntwurf top-down oder bottom-up
![Page 15: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/15.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15
Funktionen 7
• Beispiel: Summenbildung summe(a:b)int summe(int a, int b){ int sum; int i; for(sum = 0, i = a; i <= b; i++) sum = sum + i; return(sum);}
• Beliebig immer wieder verwendbar:s1 = summe(20, 50);s2 = summe(2, 120);
![Page 16: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/16.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16
Funktionsdefinition 1
• Schnittstelle (Typ, Name, Parameterliste)• Typ
– Datentyp, der von Funktion zurückgeliefert wird
– kann ein beliebiger Datentyp sein– void kein Rückgabewert ( Prozedur)
• Name – Bezeichner kann nach den Regeln für Identifier
beliebig gewählt sein, insb. keine Schlüsselworte
• Parameterliste– Typ und Name der Parameter
– kann leer sein, dann () oder (void)
![Page 17: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/17.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17
Funktionsdefinition 2
• Syntaxdiagramm
• Beispielint summe(int a, int b){ int sum; ... return(sum);}
![Page 18: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/18.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18
Funktionsdefinition 3
• Formale Parameter
• beliebiger Typ, beliebiger Bezeichner• formale Parameter Platzhalter für aktuelle
an Funktion übergebene Parameter• in Funktion wie vorbelegte lokale Variable
![Page 19: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/19.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19
Funktionsdefinition 4
• Beliebiger Block mit {} geklammert• Zusätzliche Anweisung return(ausdruck)
Rückkehr aus der Funktion• Klammern bei return können entfallen• Bei void-Funktion: nur return• Nach Rückkehr aus Funktion Programm
wird direkt nach Funktionsaufruf fortgesetzt• Typ von Ausdruck und Funktion müssen
übereinstimmen
![Page 20: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/20.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20
Funktionsdefinition 5
• Beispiel: Funktion summe()• Funktionskopf: Typ, Name, Parameter
int summe(int a, int b)
• Funktionskörper (body), Block{ int sum; // lokale Variable int i; // lokale Variable for(sum = 0, i = a; i <= b; i++) sum = sum + i; return(sum);}
• Rückgabe int sum return(sum);
![Page 21: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/21.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21
Funktionsaufruf 1
• Funktionen werden aufgerufen• im Programm steht
– Name der Funktion
– Parameter (Variable/Ausdrücke) in Klammern
– ggfs. eine Zuweisung des Funktionswerts
• von aufrufender Stelle: Sprung in Funktion • Beispiel:
int s1, s2;...s1 = summe(20, 50);s2 = summe(2, 120);
![Page 22: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/22.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22
Funktionsaufruf 2
• Syntaxdiagramm:
– jeder Funktionsaufruf ist ein Ausdruck– void-Funktionen können keine Teilausdrücke
sein wie Prozedur in anderen Sprachen
![Page 23: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/23.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23
Funktionsaufruf 3
• die Ausdrücke in der Parameterliste werden vor dem Eintritt / Sprung in die Funktion ausgewertet aktuelle Parameter
• Anzahl und Typen der Ausdrücke der aktuellen Parameter müssen mit denen der formalen Parameter in der Definition der Funktion übereinstimmen
• die Auswertungsreihenfolge der Parameter-ausdrücke ist nicht festgelegt
![Page 24: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/24.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24
Funktionsaufruf 4
• Beispiel
![Page 25: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/25.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25
Funktionsaufruf 5
• vor Programmstart
![Page 26: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/26.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26
Funktionsaufruf 6
• Programmstart: Speicherreservierung
![Page 27: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/27.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27
Funktionsaufruf 7
• Kopieren des aktuellen Parameters a
![Page 28: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/28.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28
Funktionsaufruf 8
• Aufruf der Funktion quadrat()
![Page 29: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/29.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29
Funktionsaufruf 9
• In Funktion quadrat(): berechnen
![Page 30: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/30.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30
Funktionsaufruf 10
• Returnwert liefern in a kopieren
![Page 31: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/31.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31
Funktionsaufruf 11
• Rückkehr aus quadrat() nach main()
![Page 32: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/32.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32
Funktionsaufruf 12
• Nach Rückkehr
![Page 33: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/33.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33
Funktionsaufruf 13
![Page 34: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/34.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34
Funktionsaufruf 14
![Page 35: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/35.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35
Funktionsaufruf 15
![Page 36: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/36.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36
Funktionsaufruf 16
![Page 37: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/37.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37
Exkurs: Adressen / Pointer 1
• Noch einmal:a = quadrat(a);
• Wert des aktuellen Parameters a wird vor Aufruf von quadrat(a) in den Speicherraum der Funktion quadrat kopiert
• In der Funktion quadrat(int b) erhält der formale Parameter b den Wert von a und kann damit rechnen und ihn verändern
• der Wert von a bzw. a bleibt unverändert• erst die Zuweisung a = quadrat(a); verändert
im Beispiel den Wert von a
![Page 38: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/38.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38
Exkurs: Adressen / Pointer 2
• Frage: Wie kann der Wert eines Funktions-parameters verändert werden?
• Beispiel: void swap(int i, int j){ int t; // temporaere Variable t = i; // i zwischenspeichern i = j; // j auf i zuweisen j = t; // t auf j zuweisen}
• verändert der Aufruf swap(a, b) tatsächlich
den Wert der aktuellen Parameter a und b ?
![Page 39: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/39.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39
Exkurs: Adressen / Pointer 3
• NEIN, da die aktuellen Parameter a und b mit ihrem Wert in die Funktion kopiert werden
• Veränderungen des Werts innerhalb einer Funktion haben keine Auswirkungen auf den Wert von aktuellen Parametern!
![Page 40: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/40.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40
Exkurs: Adressen / Pointer 4
• Die Lösung: Pointer oder Zeiger void swap(int *i, int *j){ int t; // temporaere Variable t = *i; // *i zwischenspeichern *i = *j; // *j auf *i zuweisen *j = t; // t auf *j zuweisen}
• Aufruf: swap(&a, &b);
![Page 41: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/41.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41
Exkurs: Adressen / Pointer 5
• Das kennen wir schon!• Beispiel: Einlesen von Werten mit scanf()scanf(%d, &zahl);
• Parameter werden mit dem Adressoperator & versehen übergeben: &zahl
• in der Funktion: Pointer *z enthält Adresse / Speicherort des Parameters und kann so den Wert des Parameters zahl verändern
Call by value oder Call by reference
![Page 42: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/42.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42
Exkurs: Adressen / Pointer 6
• Kennen wir auch schon: Wie C speichert
![Page 43: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/43.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 43
Exkurs: Adressen / Pointer 7
• Speicherplatz von a, b,c Orte im Speicher
![Page 44: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/44.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 44
Exkurs: Adressen / Pointer 8
• Zuweisung a=4; Wert an Speicherstelle
![Page 45: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/45.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 45
Exkurs: Adressen / Pointer 9
• Wdh: Jede Variable hat einen Speicherort,d.h. eine Adresse im Hauptspeicher
• Zeiger (Pointer) sind Variable, die auf eine andere Variable verweisen, oderexakter: den Speicherort bzw. die Adresse dieser Variablen als Wert haben
• Pointerdefinition: int *ip; int i = 5;
• Adresszuweisung: ip = &i;• Zugriff auf Wert: *ip = *ip + *ip;
![Page 46: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/46.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 46
Exkurs: Adressen / Pointer 10
• Zugriff auf Variable mit Pointer
![Page 47: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/47.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 47
Exkurs: Adressen / Pointer 11
• Vor Programmstart
![Page 48: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/48.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 48
Exkurs: Adressen / Pointer 12
• Programmstart und Aufruf von main()
![Page 49: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/49.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 49
Exkurs: Adressen / Pointer 13
• Zuweisung i = 5;
![Page 50: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/50.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 50
Exkurs: Adressen / Pointer 14
• Zuweisung ip = &i;
![Page 51: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/51.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 51
Exkurs: Adressen / Pointer 15
• Berechnung *ip + *ip;
![Page 52: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/52.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 52
Exkurs: Adressen / Pointer 16
• Zuweisung *ip = *ip + *ip;
![Page 53: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/53.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 53
Exkurs: Adressen / Pointer 17
• Danach
![Page 54: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/54.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 54
Funktionsaufruf und Parameter
• Parameterübergabe als Werte (call by value), z.B. bei printf()
Variable werden als Werte in den Adress-raum der Funktion auf lokale Variable kopiert
• Parameterübergabe als Adresse (call by reference), z.B. bei scanf()
Adressen der Variablen werden in den Adressraum der Funktion kopiert
• in der Funktion: Parameter sind Pointer!
![Page 55: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/55.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 55
Call by value 1
• Beispiel: Funktionsaufruf cbv
![Page 56: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/56.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 56
Call by value 2
• Vor Programmstart
![Page 57: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/57.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 57
Call by value 3
• Zuweisung a = 4;
![Page 58: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/58.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 58
Call by value 4
• Kopie des Parameters a in Funktion
![Page 59: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/59.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 59
Call by value 5
• Aufruf der Funktion
![Page 60: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/60.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 60
Call by value 6
• Zuweisung b = b * 2;
![Page 61: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/61.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 61
Call by value 7
• Rückkehr aus Funktion
![Page 62: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/62.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 62
Call by value 8
• Variable a unverändert!!!
![Page 63: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/63.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 63
Call by reference 1
• Beispiel: Funktionsaufruf cbr
![Page 64: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/64.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 64
Call by reference 2
• Vor Programmstart
![Page 65: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/65.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 65
Call by reference 3
• Wo ist der Unterschied cbv – cbr?
![Page 66: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/66.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 66
Call by reference 4
• Aufruf: Adresse der Variablen: doit(&a)!!!
![Page 67: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/67.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 67
Call by reference 5
• In Funktion: *b Zeiger auf Variable!!!
![Page 68: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/68.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 68
Call by reference 6
• Zuweisung a = 4;
![Page 69: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/69.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 69
Call by reference 7
• Kopie der Adresse in die Funktion
![Page 70: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/70.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 70
Call by reference 8
• Aufruf der Funktion
![Page 71: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/71.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 71
Call by reference 9
• Zuweisung *b = *b * 2;
![Page 72: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/72.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 72
Call by reference 10
• Rückkehr aus Funktion
![Page 73: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/73.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 73
Call by reference 11
• So soll es sein: Variable a verändert!!!
![Page 74: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/74.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 74
Funktionsdeklaration 1
• vor dem Aufruf einer Funktion muss diese dem C-Compiler bekannt sein– Name der Funktion– Typ der Funktion / des Rückgabewerts– Anzahl und Typen der Parameter
• ist die Funktion vor ihrem Aufruf definiert, ist sie dem Compiler bekannt
• andernfalls muss sie bekannt gemacht oder deklariert werden
Prototype
![Page 75: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/75.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 75
Funktionsdeklaration 2
• Beispiel:int power(int, int);oderint power(int b, int e);
• Deklaration erzeugt keinen Code!• Nach der Deklaration kann die Funktion
verwendet dann werden• Compiler kann Name, Typ und Parameter
prüfen erhöht Programmiersicherheit
![Page 76: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/76.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 76
Funktionsdeklaration 3
• Funktionsdefinition (analog zu Variablen!)– erzeugt Code– macht Funktion (Typ, Name, Parameter) bekannt
• Funktionsdeklaration (analog zu Variablen)– macht Funktion (Typ, Name, Parameter) bekannt– vor Verwendung der Funktion
• Oft in Standard- (oder eigenen) Headerfiles– Konvention: Dateiname endet auf .h– #include <file.h> fügt Headerdatei textuell
in Quelltext ein deklarierte Funktionen bekannt
![Page 77: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/77.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 77
Funktionsdeklaration 4
![Page 78: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/78.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 78
Sichtbarkeit von Funktionen
• Eine C-Quelldatei stellt ein Modul dar (= Übersetzungseinheit)
• in einem Modul definierte Funktionen können in anderen Modulen verwendet werden
• sie sind damit extern sichtbar und werden durch Prototypes bekannt gemacht
• Soll Sichtbarkeit auf das Modul (= Quelldatei) beschränkt werden: static verwenden
• Beispiel: static int localfunc() {…}
![Page 79: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/79.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 79
Gedächtnis von Funktionen
• lokale Variable werden beim Eintritt in die Funktion im Speicher angelegt und nach Verlassen der Funktion ungültig
• ihre Werte verschwinden!• Abhilfe:
– globale Variable– ungünstig, Nebeneffekte! Vermeiden!– statische Variable in Funktion– Wert bleibt erhalten, sichtbar nur in Funktion– Bsp: static int wert = 1;
![Page 80: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/80.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 80
Optimierungen
• Rückgabewerte oft direkt als Parameter für Funktionsaufrufe verwendbar– ohne Zwischenspeicherung in Variablen– Beispiel: funa(funb(), func());
• Funktionsaufruf kostet Zeit und Speicherplatz• Funktion kann als inline definiert werden
– Bsp: inline void swap(int i, int j){…}– statt Funktionsaufruf wird Funktionscode eingefügt– nur Empfehlung an den Compiler– gcc setzt Inlining bei Optimierung um (gcc –O)
![Page 81: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/81.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 81
Rekursion
• bei einem Funktionsaufruf wird ein eigener Speicherbereicht für lokale Variable (und damit auch für Parameter) angelegt
• damit ist möglich, dass eine Funktion sich selbst aufruft Rekursion
• Beispiel: Fakultätsfunktion n! = 1*2*…*nint fakultaet(int n) { if(n == 1) return(1); // Endebedingung else return(n * fakultaet(n – 1));}
elegante Lösungen möglich
![Page 82: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/82.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 82
Hinweise 1
• zerteilen Sie eine größere Aufgabe in kleinere Teilaufgaben
• führen Sie Funktionen mit lokalen Variablen (einschl. Parametern) ein– vermeiden Sie globale Variable– wählen Sie aufschlussreiche Namen– klarer Zweck!– nicht zu groß! Besser aufteilen in Teilfunktionen!– nutzen Sie static-Funktionen– Deklaration von Prototypen
![Page 83: Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014](https://reader035.vdocuments.site/reader035/viewer/2022062623/55204d8149795902118d41a9/html5/thumbnails/83.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 83
Hinweise 2
• Definition, Deklaration und Aufruf von Funktionen müssen übereinstimmen– Typ des Funktionswertes– Anzahl, Typ und Reihenfolge der Parameter
• Eine Funktion hat nur einen Rückgabewert• Bei Funktionen mit Rückgabewert immer return als letztes Statement
• Funktionsdefinition ohne Semikolon ;• Funktionsdeklaration/Prototyp mit ;