Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Barthold Achziger Geändert vor über 10 Jahren
1
Informatik II Grundlagen der Programmierung Programmieren in C Variablen, Konstanten, Typen
Hochschule Fulda – FB ET Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ
2
Variablen 1 Variable sind Platzhalter für Daten
haben einen festgelegten Speicherort, an dem der aktuelle Wert gespeichert wird der aktuelle Wert (an seinem Speicherort) ist veränderbar Attribute von Variablen: Datentyp Namen (Bezeichner, Identifier) Lebensdauer / Speicherklasse evtl. initialer Wert Sichtbarkeit (Scope) im Programm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
3
Variablen 2 Variablen-Definitionen, z.B. double u; short int i, tab = 5; char *hallo = "Hallo, Welt!"; Position im Programm: außerhalb von Funktionen am Anfang eines Blocks, also nach { Wert ist veränderbar (Zuweisung, Operation) Programmstruktur Lebensdauer / Scope Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
4
Wie speichert C? 1 Hauptspeicher
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
5
Wie speichert C? 2 Beispiel: Zugriff auf Variable
6
Wie speichert C? 3 Vor Programmstart
7
Wie speichert C? 4 Programmstart und Aufruf von main()
8
Wie speichert C? 5 Zuweisung a = 4;
9
Wie speichert C? 6 Zuweisung b = 8;
10
Wie speichert C? 7 Berechnung a * b;
11
Wie speichert C? 8 Zuweisung c = a * b;
12
Wie speichert C? 9 Danach
13
Datentypen 1 Menge von Werten und Menge von Operationen auf diesen Werten Konstanten / Variablen Datentypen bestimmen Darstellung der Werte im Rechner benötigten Speicherplatz zulässige Operationen Festlegung des Datentyps implizit durch Schreibweise bei Konstanten explizit durch Deklaration/Definition bei Variablen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
14
Datentypen 2 Vordefinierte Grunddatentypen char Zeichen (ASCII-Kode, 8 Bit) int Ganzzahl (maschinenabhängig, meist 16 oder 32 Bit) float Gleitkommazahl (32 Bit, IEEE, etwa auf 6 Stellen genau) double doppelt genaue Gleitkommazahl (64 Bit, IEEE, etwa auf Stellen genau) void ohne Wert (z.B. Zeiger) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
15
Datentypen 3 Type-Modifier spezifizieren Grunddatentypen short int, long int - legen Länge der Ganzzahl fest - maschinenabhängig, 16 Bit, 32 Bit - int kann auch fehlen long double - Gleitkommazahl, erw. Genauigkeit - oft 128 Bit, IEEE signed, unsigned - char/int mit/ohne Vorzeichen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
16
Datentypen 4 Typ Wertebereich Größe char -128 bis 127 1 Byte
unsigned char 0 bis 255 short int bis 2 Byte unsigned short int 0 bis int bis 4 Byte unsigned int 0 bis long int unsigned long int long long bis 8 Byte unsigned long long 0 bis Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16
17
Datentypen 5 Gleitkommatypen Normaler Typ ist double
Typ float mit 6 Stellen Genauigkeit für die meisten Anwendungen nicht geeignet Type long double für Spezialfälle mit hohen Anforderungen an Genauigkeit und Breite Typ Bereich Genauigkeit Größe float 1.2e-38 bis 3.4e38 6 Stellen 4 Byte double 2.3e-308 bis 1.7e308 15 Stellen 8 Byte long double 3.4e-4932 bis 1.2e4932 33 Stellen 16 Byte Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17
18
Konstante Werte 1 Dezimal, sedezimal (Hex), oktal 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18
19
Konstante Werte 2 Gleitkommakonstanten Fließkommazahlen
mindestens ein Punkt (kein Komma!) Exponential- oder Festkommaschreibweise Fließkommazahlen 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19
20
Konstante Werte 3 Zeichen char Keine Codierung nach UNICODE
1 Byte, i.d.R. 8 Bit char c = 'A'; Konstanten in Hochkommata / einfachen Anführungszeichen Kodierung nach ASCII-Code Keine Codierung nach UNICODE 2 Byte / 16 Bit für internationale Zeichensätze Datentyp wchar_t definiert in <stddef.h> dazu eine Fülle von passenden Funktionen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20
21
Konstante Werte 4 Zeichenketten / Strings char *s = "Fulda";
Konstanten in Hochkommata / doppelten Anführungszeichen Terminiert mit NUL (ASCII-NUL) im Speicher immer ein Byte mehr als gültige Zeichen für terminierendes NUL-Zeichen kann Steuerzeichen (wie '\n') enthalten F u l d a \0 70 117 108 100 97 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21
22
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 = ; // pi liefert 3! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
23
Typwandlung 1 Implizite Typwandlung durch Compiler Implizit char int
erweiterund von "kleiner" zu "größer" Bsp: unsigned long l = 3; Achtung: unsigned long l = -1; l hat dann den Wert , 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! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23
24
Typwandlung 2 float double wie char int Berechnungen erfolgen im ranghöchsten Typ char < short < int < long < long long float < double < long double integer < "floating point" signed und unsigned vom selben Rang Typwandlung höherwertig niederwertig kann Informationsverlust bedeuten int geteilt durch int gibt int: 1 / 2 = 0 Plattform- und Compilerabhängigkeiten! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24
25
Typumwandlung 3 Automatische implizite Typumwandlung bei unterschiedlicher Typen in Ausdrücken
26
Typumwandlung 4 Explizite Typumwandlung (Typecast)
Fehlervermeidung durch implizite Typwandlung (typ) ausdruck // typecast Bsp: (float) i / (float) j; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26 26
27
Definition und Deklaration 1
Pseudocode lax, interpretierbar C-Code strikt, eindeutig Variablen können nicht einfach so verwendet werden, sie müssen vor Verwendung definiert und deklariert werden Deklaration es gibt eine Variable von diesem Typ mit diesem Namen irgendwie, irgendwo, irgendwann ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
28
Definition und Deklaration 2
Definition: Typ, Name und Speicher für die Variable werden festgelegt Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
29
Definition und Deklaration 3
Deklaration / Definition von Variablen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
30
Speicherklassen 1 Funktionen können nur global, d.h. ausserhalb von Blöcken definiert werden Sichtbarkeit global static Sichtbarkeit nur im Quelldateikontext Variablen können ausserhalb von Blöcken, d.h. global definiert werden static Sichtbarkeit im Quelldateikontext Variablen können innerhalb von Blöcken, d.h. lokal oder automatisch definiert werden Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
31
Speicherklassen 2 auto static extern register volatile
nur innerhalb eines Blocks, Standardklasse Variable existiert / ist sichtbar nur im Block static in Block: Variable erhält ihren Wert sonst: Variable/Funktion nur in C-Quelle sichtbar extern Variable ist in anderer C-Quelle definiert register Variable CPU-Register, hat keine Adresse! volatile Variable kann ausserhalb Programm verändert werden Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
32
Sichtbarkeit 1 Der Sichtbarkeitsbereich (Scope) einer Variablen Programmabschnitt, in dem die Variable sichtbar/nutzbar/gültig 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
33
Sichtbarkeit 2 Globale Variable müssen ausserhalb von Blöcken definiert sein Variablen aus anderen Modulen (globale Variable) müssen 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
34
Sichtbarkeit 3 Beispiel: 2 Module / Quelldateien
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
35
Sichtbarkeit 4 Beispiel: scope.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
36
Sichtbarkeit 5 Welche Ausgaben erzeugt scope?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
37
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 ungültig! Zugriff darauf ist dann undefiniert Globale oder statische Variable „lebt“ vom Anfang bis zum Ende des Programms Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
38
Lebensdauer 2 Beispiel: lifetime.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
39
Lebensdauer 3 Welche Ausgaben erzeugt lifetime?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
40
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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
41
Speichersegmentierung 2
Beispiel (Sun Solaris) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
42
Speichersegmentierung 3
Warum Speichersegmentierung? Welche Vorteile hat das? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
43
Speichersegmentierung 4
Beispiel: segment.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.