of 43 /43
Informatik II Grundlagen der Programmierung Programmieren in C Variablen, Konstanten, Typen Hochschule Fulda – FB ET Sommersemester 2014 http://c-et.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

Informatik II Grundlagen der Programmierung Programmieren in C Variablen, Konstanten, Typen Hochschule Fulda – FB ET Sommersemester 2014

Embed Size (px)

Text of Informatik II Grundlagen der Programmierung Programmieren in C Variablen, Konstanten, Typen...

  • Folie 1
  • Informatik II Grundlagen der Programmierung Programmieren in C Variablen, Konstanten, Typen Hochschule Fulda FB ET Sommersemester 2014 http://c-et.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ
  • Folie 2
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 Variablen 1 Variable sind Platzhalter fr Daten haben einen festgelegten Speicherort, an dem der aktuelle Wert gespeichert wird der aktuelle Wert (an seinem Speicherort) ist vernderbar Attribute von Variablen: Datentyp Namen (Bezeichner, Identifier) Lebensdauer / Speicherklasse evtl. initialer Wert Sichtbarkeit (Scope) im Programm
  • Folie 3
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 Variablen 2 Variablen-Definitionen, z.B. double u; short int i, tab = 5; char *hallo = "Hallo, Welt!"; Position im Programm: auerhalb von Funktionen am Anfang eines Blocks, also nach { Wert ist vernderbar (Zuweisung, Operation) Programmstruktur Lebensdauer / Scope
  • Folie 4
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 Wie speichert C? 1 Hauptspeicher
  • Folie 5
  • Wie speichert C? 2 Beispiel: Zugriff auf Variable
  • Folie 6
  • Wie speichert C? 3 Vor Programmstart
  • Folie 7
  • Wie speichert C? 4 Programmstart und Aufruf von main()
  • Folie 8
  • Wie speichert C? 5 Zuweisung a = 4;
  • Folie 9
  • Wie speichert C? 6 Zuweisung b = 8;
  • Folie 10
  • Wie speichert C? 7 Berechnung a * b;
  • Folie 11
  • Wie speichert C? 8 Zuweisung c = a * b;
  • Folie 12
  • Wie speichert C? 9 Danach
  • Folie 13
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ13 Datentypen 1 Menge von Werten und Menge von Operationen auf diesen Werten Konstanten / Variablen Datentypen bestimmen Darstellung der Werte im Rechner bentigten Speicherplatz zulssige Operationen Festlegung des Datentyps implizit durch Schreibweise bei Konstanten explizit durch Deklaration/Definition bei Variablen
  • Folie 14
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 Datentypen 2 Vordefinierte Grunddatentypen char Zeichen (ASCII-Kode, 8 Bit) int Ganzzahl (maschinenabhngig, meist 16 oder 32 Bit) float Gleitkommazahl (32 Bit, IEEE, etwa auf 6 Stellen genau) double doppelt genaue Gleitkommazahl (64 Bit, IEEE, etwa auf 12 Stellen genau) void ohne Wert (z.B. Zeiger)
  • Folie 15
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 Datentypen 3 Type-Modifier spezifizieren Grunddatentypen short int, long int - legen Lnge der Ganzzahl fest - maschinenabhngig, 16 Bit, 32 Bit - int kann auch fehlen long double - Gleitkommazahl, erw. Genauigkeit - oft 128 Bit, IEEE signed, unsigned - char/int mit/ohne Vorzeichen
  • Folie 16
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 Datentypen 4 TypWertebereichGre char-128 bis 1271 Byte unsigned char0 bis 2551 Byte short int-32.768 bis 32.7672 Byte unsigned short int0 bis 65.5352 Byte int-2.147.483.648 bis 2.147.483.6474 Byte unsigned int0 bis 4.294.967.2954 Byte long int-2.147.483.648 bis 2.147.483.6474 Byte unsigned long int0 bis 4.294.967.2954 Byte long -9.223.372.036.854.755.808 bis 9.223.372.036.854.755.807 8 Byte unsigned long long0 bis 18.446.744.073.709.551.6158 Byte
  • Folie 17
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 Datentypen 5 Gleitkommatypen Normaler Typ ist double Typ float mit 6 Stellen Genauigkeit fr die meisten Anwendungen nicht geeignet Type long double fr Spezialflle mit hohen Anforderungen an Genauigkeit und Breite TypBereichGenauigkeitGre float1.2e-38 bis 3.4e386 Stellen4 Byte double2.3e-308 bis 1.7e30815 Stellen8 Byte long double3.4e-4932 bis 1.2e493233 Stellen16 Byte
  • Folie 18
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 Konstante Werte 1 Dezimal, sedezimal (Hex), oktal 4711, 0x1267, 011147 Ganze Zahlen signed (ist Standard) unsigned: 4711u oder 4711U long: 4711l oder 4711L unsigned long: 4711ul oder 4711UL Warum? Der Datentyp bestimmt ber Speicherplatz und Ergebnisse bei Rechnungen
  • Folie 19
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 Konstante Werte 2 Gleitkommakonstanten mindestens ein Punkt (kein Komma!) Exponential- oder Festkommaschreibweise Fliekommazahlen float: 5.f oder 5.0e1F (nicht 5f) double (Standard): 3.14 long double: 7.l oder 7.L Warum? Der Datentyp bestimmt ber Speicherplatz und Ergebnisse bei Rechnungen
  • Folie 20
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 Konstante Werte 3 Zeichen char 1 Byte, i.d.R. 8 Bit char c = 'A'; Konstanten in Hochkommata / einfachen Anfhrungszeichen Kodierung nach ASCII-Code Keine Codierung nach UNICODE 2 Byte / 16 Bit fr internationale Zeichenstze Datentyp wchar_t definiert in dazu eine Flle von passenden Funktionen
  • Folie 21
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 Konstante Werte 4 Zeichenketten / Strings char *s = "Fulda"; Konstanten in Hochkommata / doppelten Anfhrungszeichen Terminiert mit NUL (ASCII-NUL) im Speicher immer ein Byte mehr als gltige Zeichen fr terminierendes NUL -Zeichen kann Steuerzeichen (wie '\n' ) enthalten Fulda\0 70117108100970
  • Folie 22
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 Variablen und Typen Typbindung bedeutet: Variable ist von einem bestimmten Typ Funktion liefert einen bestimmten Typ Variable und Typ im Quelltext festgelegt Zuweisungen a = b; Typ von b wird zum Typ von a gewandelt Der Wert wird a zugewiesen Bsp: int a = 4711; // ok Bsp: int pi = 3.1415; // pi liefert 3!
  • Folie 23
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 Typwandlung 1 Implizite Typwandlung durch Compiler erweiterund von "kleiner" zu "grer" Bsp: unsigned long l = 3; Achtung: unsigned long l = -1; l hat dann den Wert 4294967295, da unsigned ! Implizit char int Compiler rechnet intern mit int Achtung char im Bereich -127 bis 128 oder 0 bis 255 (unsigned) Achtung: Konstante EOF ist mit -1 definiert!
  • Folie 24
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 Typwandlung 2 float double wie char int Berechnungen erfolgen im ranghchsten Typ char < short < int < long < long long float < double < long double integer < "floating point" signed und unsigned vom selben Rang Typwandlung hherwertig niederwertig kann Informationsverlust bedeuten int geteilt durch int gibt int : 1 / 2 = 0 Plattform- und Compilerabhngigkeiten!
  • Folie 25
  • Typumwandlung 3 Automatische implizite Typumwandlung bei unterschiedlicher Typen in Ausdrcken
  • Folie 26
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ26 Typumwandlung 4 Explizite Typumwandlung (Typecast) Fehlervermeidung durch implizite Typwandlung (typ) ausdruck // typecast Bsp: (float) i / (float) j;
  • Folie 27
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Definition und Deklaration 1 Pseudocode lax, interpretierbar C-Code strikt, eindeutig Variablen knnen nicht einfach so verwendet werden, sie mssen vor Verwendung definiert und deklariert werden Deklaration es gibt eine Variable von diesem Typ mit diesem Namen irgendwie, irgendwo, irgendwann...
  • Folie 28
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 Definition und Deklaration 2 Definition: Typ, Name und Speicher fr die Variable werden festgelegt
  • Folie 29
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 Definition und Deklaration 3 Deklaration / Definition von Variablen
  • Folie 30
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 Speicherklassen 1 Funktionen knnen nur global, d.h. ausserhalb von Blcken definiert werden Sichtbarkeit global static Sichtbarkeit nur im Quelldateikontext Variablen knnen ausserhalb von Blcken, d.h. global definiert werden Sichtbarkeit global static Sichtbarkeit im Quelldateikontext Variablen knnen innerhalb von Blcken, d.h. lokal oder automatisch definiert werden
  • Folie 31
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 Speicherklassen 2 auto nur innerhalb eines Blocks, Standardklasse Variable existiert / ist sichtbar nur im Block static in Block: Variable erhlt ihren Wert sonst: Variable/Funktion nur in C-Quelle sichtba r extern Variable ist in anderer C-Quelle definiert register Variable CPU-Register, hat keine Adresse! volatile Variable kann ausserhalb Programm verndert werden
  • Folie 32
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 Sichtbarkeit 1 Der Sichtbarkeitsbereich (Scope) einer Variablen Programmabschnitt, in dem die Variable sichtbar/nutzbar/gltig ist Der Scope wird durch den Ort der Definition bzw. Deklaration der Variablen festgelegt innerhalb eines Blocks sichtbar von der Stelle der Definition bis zum Blockende ausserhalb sichtbar von Stelle der Definition bzw. Deklaration bis zum Ende der Quelldatei mit static definierte Variablen sind nur im Modul (entspricht C-Quelle) sichtbar
  • Folie 33
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ33 Sichtbarkeit 2 Globale Variable mssen ausserhalb von Blcken definiert sein Variablen aus anderen Modulen (globale Variable) mssen explizit als extern deklariert werden Scope einer Funktion: Bereich auf Ebene des Programms, in der die Funktion nutzbar ist global sollte dann vor Nutzung bekannt sein (Prototype) lokal nur im Modul bei Definition als static
  • Folie 34
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 Sichtbarkeit 3 Beispiel: 2 Module / Quelldateien
  • Folie 35
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 Sichtbarkeit 4 Beispiel: scope.c
  • Folie 36
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ36 Sichtbarkeit 5 Welche Ausgaben erzeugt scope?
  • Folie 37
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ37 Lebensdauer 1 Lebensdauer einer Variablen ist die Zeit, in der diese Variable Speicherplatz belegt lokale / automatische Variable lebt, d.h. hat einen Speicherort vom Anfang bis zum Ende des Blocks, in dem sie definiert ist Speicherplatz wird bei Verlassen des Blocks wieder freigegeben Variable ist ungltig! Zugriff darauf ist dann undefiniert Globale oder statische Variable lebt vom Anfang bis zum Ende des Programms
  • Folie 38
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 Lebensdauer 2 Beispiel: lifetime.c
  • Folie 39
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ39 Lebensdauer 3 Welche Ausgaben erzeugt lifetime?
  • Folie 40
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 Speichersegmentierung 1 Programmcode und Programmdaten eines Programms werden von Betriebssystem in unterschiedliche Speichersegmente geladen Programmcode Textsegment globale / statische Daten Datensegmente Konstanten initialisierte Daten nicht initialisierte Daten automatische Daten Stacksegment Daten werden erst bei Eintritt in Block erzeugt
  • Folie 41
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ41 Speichersegmentierung 2 Beispiel (Sun Solaris)
  • Folie 42
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ42 Speichersegmentierung 3 Warum Speichersegmentierung? Welche Vorteile hat das?
  • Folie 43
  • Programmieren in C - Peter Klingebiel - HS Fulda - DVZ43 Speichersegmentierung 4 Beispiel: segment.c