Informatik II Grundlagen der Programmierung Programmieren in C Variablen, Konstanten, Typen...
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
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