Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Ähnliche Dokumente
7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Vorkurs C++ Programmierung

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

2. Programmierung in C

Arrays (Felder/Vektoren)

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

float *point(float a, float b); // Funktionsdeklaration Zeiger als Funktionswert // point liefert als Wert die Adresse seines Ergebnisses

Deklarationen in C. Prof. Dr. Margarita Esponda

Übersicht. Einführung in die Programmierung. main. main. main. main. Speicherverwaltung. Definition nach ANSI C:

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

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

einlesen n > 0? Ausgabe Negative Zahl

C++ - Einführung in die Programmiersprache Funktionen. Leibniz Universität IT Services Anja Aue

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Speicherklassen (1) Lokale Variablen

Einführung in die C-Programmierung

2. Programmierung in C

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

Java Einführung Methoden. Kapitel 6

Vorlesung Programmieren

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Inhalt. 4.7 Funktionen

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

6. Funktionen, Parameterübergabe

Programmierung mit C Zeiger

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

C/C++-Programmierung

Einführung in die Programmierung

C-Crashkurs. Praktikum Systemmanagement und Sicherheit

Grundlagen der Programmierung

Einstieg in die Informatik mit Java

Methoden und Wrapperklassen

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einführung in die Programmierung Wintersemester 2016/17

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

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

Arrays,Strings&Pointer in C/C++

Funktionen in Python

Praxis der Programmierung

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Übersicht. Informatik 1 Teil 9: komplexe Datentypen (Strukturen, Enumerationen, Unions)

Grundlagen der OO- Programmierung in C#

6. Zeiger Allgemeines Definition eines Zeigers

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

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

Grundlagen der Programmierung

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Einstieg in die Informatik mit Java

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

6 ZEIGER UND REFERENZEN - ALLGEMEINES

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

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

Programmieren in C / C++ Grundlagen C 4

Prof. W. Henrich Seite 1

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 12

Einführung in die Programmierung Blockkurs Java

F Zeiger, Felder und Strukturen in C

Informatik II Übung 05. Benjamin Hepp 3 April 2017

Die Programmiersprache C99: Zusammenfassung

Karlsruher Institut für Technologie

Einstieg in die Informatik mit Java

2 Beispiel Sinusberechnung

Physische Datenstrukturen

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

Felder (1) Felder (Arrays) speichern viele Datenelemente des gleichen Typs. Auf einzelne Elemente kann über einen Index zugegriffen werden

GI Vektoren

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

2. Unterprogramme und Methoden

Speicher und Adressraum

Elementare Datentypen in C++

Vorkurs C++ Programmierung

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Felder, Zeiger und Adreßrechnung

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Prozeduren und Funktionen

Einstieg in die Informatik mit Java

С als erste Programmiersprache

2. Programmierung in C

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Rechenzentrum. Programmieren in C. Simone Knief Rechenzentrum der CAU

Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

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

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Funktionen und Parameter

Präzedenz von Operatoren

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

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

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

Unterprogramme, Pointer und die Übergabe von Arrays

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

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

Transkript:

2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben elementare Datentypen void - Fkt. liefert keinen Funktionswert Struktur, Union Zeiger auf beliebige Objekte Bsp. nicht zulaessige Typangaben Felder Funktionen char f1(...); // f1 liefert 1 Zeichen bzw. Zahl char *f2(...); // f2 liefert Pointer auf Zeichen bzw. eine Zeichenkette struct element *f3(...); // f3 liefert Pointer auf Struktur vom Typ struct element Parameterliste typ funktionsname( typ1 parameter1, typ2 parameter2,...) char fkt1( char a[], int b); Funktion ohne Parameter Typ void leere Liste char fkt2 ( ); Typ void* aktuelle Parameter Pointer von beliebigem Typ 2.1. Parameter der main( ) - Funktion werden von der Shell an main( ) uebergeben int main( int argc, char **argv, char **envp ) // argc argument counter // argv argument vector

int main( int argc, char *argv[], char *envp[] ) 1. argc Anzahl der Kommandozeilenargumente >= 1 ( einschliesslich Kommandoname ) 2. Adresse eines Pointerfeldes argv[0] Zeiger auf Kommandoname argv[1] Zeiger auf 1. Argument argv[argc -1] Zeiger auf letztes Argument NULL Ende des Pointerfeldes 3. Adresse eines Pointerfeldes envp[0] Zeiger auf 1. Umgebungsvariable NULL Bsp. #include<stdio.h> int main( int argc, char **argv, char **envp){ int i=0, n; n= argc; while(n>0){ printf( %s \n, argv[argc-1]); n--; while(envp!= NULL) printf( %s \n, envp[i++]); return(0); 2.2. Parameter uebergabe - Typen sollten uebereinstimmen (wird eventuell nicht geprueft bzw. konvertiert) - Reihenfolge der Parameteruebergabe abhaengig vom Compiler (keine Abhaengigkeiten zw. einzelnen Parametern) z.b. fkt(i++, x[i]); // Wert von i vom Compiler abhaengig /* falls 2. Parameter zuerst uebergeben wird x[i] sonst x[i+1]*/ - Durchfuehrung der Parameteruebergabe - call by vallue // fuer C nur diese Art - call by references // fuer C++ - call by vallue bei Funktionsaufruf wird der Wert des aktuellen Parameters uebergeben ( in der aufgerufenen Funktion wird Kopie des aktuellen Parameters erzeugt ) - Funktion arbeitet mit Kopie es ist keine Aenderung am Original moeglich

- Rueckgabe von Ergebniswerten - Verwendung globaler Variablen s.u. - ueber Funktionswert return ( Ausdruck ); Wert des Ausdrucks = Funktionswert return Ausdruck; void Funktion return ; - Uebergabe der Adresse einer Variablen als Wertparameter int fkt3(int *a){ *a=1; // Zugriff auf Original return 0; Funktionsaufruf int x=0, y; y = fkt3 (&x); // Wert von x wird veraendert - Uebergabe von Vektoren (Variablenname = Adresse) int v[100],y; y = fkt3(v); // Adresse 1. Vektorelement entspr. &v[0] - Problem in Funktion keine Ermittlung der Anzahl der Elemente int fkt4( int *a){ sizeof(a); // Byteanzahl des Pointers!!! //Funktion zur Vektoreingabe int vein (int *a, int n ){ int i; for(i=0;i<n;i++){ scanf( %d, &a[i]) return(0); // Aufruf y= vein( v, sizeof(v) / sizeof( int ) );

2.3. Gueltigkeitsbereiche - call by reference int fkt5( int &n){ //Referenztyp n=1; // Zugriff auf Original return (0); - lokale Variablen // Aufruf y= fkt5(x); C -> Vereinbarung am Anfang eines Blocks ( {... ) - Standardspeicherklasse auto Variable wird bei Eintritt in den Block ( Funktionsaufruf ) erst angelegt Lebensdauer bei Blockende Freigabe der Variable Wert beleibt nicht erhalten ( Inhalt unbestimmt ) - Fehlerquelle bei Funktionen die als Funktionswert Pointer liefern struct element { char y[20]; float x; struct element x fkt1( ){ struct element a ; fgets( a.z, sizeof(a.z), stdin ); scanf( %f,&a.x); return &a; // Speicherplatz von a wird freigegeben // wird evtl. fuer andere auto Variable benutzt // -> Inhalt von a evtl. verfaelscht Aenderung der Lebensdauer -> - Speicherklasse static (fuer lokale Variablen ) static struct element a; // Variable bleibt nach der Funktion erhalten struct element { char y[20]; float x; struct element x fkt1( ){ static struct element a ; fgets( a.z, sizeof(a.z), stdin ); scanf( %f,&a.x);

return &a; // Speicherplatz von a wird nicht freigegeben // Variable bleibt nach der Funktionsende erhalten // Zugriff von aussen ueber Pointer moeglich Probleme bei Multithreading ( parallele Funktionsauffuerung )