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

Informatik IIGrundlagen 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

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

Programmieren in C - 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

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

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

Wie speichert C? 1

• Hauptspeicher

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

Wie speichert C? 2

• Beispiel: Zugriff auf Variable

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

Wie speichert C? 3

• Vor Programmstart

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

Wie speichert C? 4

• Programmstart und Aufruf von main()

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

Wie speichert C? 5

• Zuweisung a = 4;

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

Wie speichert C? 6

• Zuweisung b = 8;

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

Wie speichert C? 7

• Berechnung a * b;

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

Wie speichert C? 8

• Zuweisung c = a * b;

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

Wie speichert C? 9

• Danach

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13

Datentypen 1

• Menge von Werten undMenge 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

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

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 12 Stellen genau)void ohne Wert (z.B. Zeiger)

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

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 fehlenlong double - Gleitkommazahl, erw. Genauigkeit- oft 128 Bit, IEEEsigned, unsigned - char/int mit/ohne Vorzeichen

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

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 1 Byte

short int -32.768 bis 32.767 2 Byte

unsigned short int 0 bis 65.535 2 Byte

int -2.147.483.648 bis 2.147.483.647 4 Byte

unsigned int 0 bis 4.294.967.295 4 Byte

long int -2.147.483.648 bis 2.147.483.647 4 Byte

unsigned long int 0 bis 4.294.967.295 4 Byte

long long -9.223.372.036.854.755.808 bis 9.223.372.036.854.755.807

8 Byte

unsigned long long 0 bis 18.446.744.073.709.551.615 8 Byte

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

Konstante Werte 2

• Gleitkommakonstanten– 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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20

Konstante Werte 3

• Zeichen char– 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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 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 0

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 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 = 3.1415; // pi liefert 3!

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23

Typwandlung 1

• Implizite Typwandlung durch Compiler– erweiterund von "kleiner" zu "größer" – 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!

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 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!

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

Typumwandlung 3

• Automatische implizite Typumwandlung bei unterschiedlicher Typen in Ausdrücken

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26

Typumwandlung 4

• Explizite Typumwandlung (Typecast)– Fehlervermeidung durch implizite Typwandlung– (typ) ausdruck // typecast– Bsp: (float) i / (float) j;

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 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 ...

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28

Definition und Deklaration 2

• Definition: Typ, Name und Speicher für die Variable werden festgelegt

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29

Definition und Deklaration 3

• Deklaration / Definition von Variablen

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

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– Sichtbarkeit global– static Sichtbarkeit im Quelldateikontext

• Variablen können innerhalb von Blöcken, d.h. lokal oder automatisch definiert werden

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31

Speicherklassen 2

• auto– 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

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

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

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

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34

Sichtbarkeit 3

• Beispiel: 2 Module / Quelldateien

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35

Sichtbarkeit 4

• Beispiel: scope.c

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36

Sichtbarkeit 5

• Welche Ausgaben erzeugt scope?

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

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38

Lebensdauer 2

• Beispiel: lifetime.c

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39

Lebensdauer 3

• Welche Ausgaben erzeugt lifetime?

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

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41

Speichersegmentierung 2

• Beispiel (Sun Solaris)

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42

Speichersegmentierung 3

• Warum Speichersegmentierung?Welche Vorteile hat das?

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 43

Speichersegmentierung 4

• Beispiel: segment.c


Recommended