21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

7.7.2 Explizite Typumwandlung (cast-operator)<br />

Die implizite Typumwandlung kann zu Fehlern, oder zum<strong>in</strong>dest zu unerwünschten Ergebnissen<br />

führen. Dies kann durch Ändern der Variablentypen oder durch explizite Typumwandlungen mit<br />

dem Castoperator (gegen <strong>die</strong> Compilerregeln sozusagen) umgangen werden. Mit dem Castoperator<br />

kann e<strong>in</strong>e Typumwandlung erzwungen werden. Der Castoperator besteht aus e<strong>in</strong>em <strong>in</strong> Klammern<br />

e<strong>in</strong>geschlossenen gültigen Datentyp. Der Castoperator hat e<strong>in</strong>e hohe Priorität <strong>und</strong> b<strong>in</strong>det se<strong>in</strong> rechtes<br />

Argument, im Zweifelsfall empfiehlt es sich dennoch, Klammern zu setzen.<br />

Achtung, mit dem Castoperator können auch grössere Datentypen <strong>in</strong> Kle<strong>in</strong>ere gezwängt werden.<br />

Der Programmierer ist aber selbst dafür verantwortlich, dass dabei ke<strong>in</strong>e Daten verlorengehen oder<br />

unerwünschte Ergebnisse entstehen:<br />

Umwandlung<br />

Bemerkungen<br />

Kle<strong>in</strong>er Integer <strong>in</strong> grossen Integer Ke<strong>in</strong>e Probleme<br />

Grosser Integer <strong>in</strong> kle<strong>in</strong>en Integer Höherwertige Bits werden abgeschnitten, falsches Ergebnis<br />

wenn Zahl ausserhalb Wertebereich<br />

Unsigned <strong>in</strong> Signed<br />

Falsches Ergebnis wenn Zahl ausserhalb Wertebereich<br />

Signed <strong>in</strong> Unsigned<br />

Falsches Ergebnis bei negativen Zahlen<br />

Float nach Integer<br />

Auf maximalen Wert gesättigt falls Zahl ausserhalb Wertebereich,<br />

Nachkommastellen werden abgeschnitten.<br />

Integer nach Float<br />

Kle<strong>in</strong>er Float nach grossem Float<br />

Grosser Float nach kle<strong>in</strong>em Float<br />

Po<strong>in</strong>ter nach Float<br />

Float nach Po<strong>in</strong>ter<br />

Po<strong>in</strong>ter auf A nach Po<strong>in</strong>ter auf B<br />

Po<strong>in</strong>ter nach Integer<br />

Integer nach Po<strong>in</strong>ter<br />

In gleichen Typ mit anderen Qualifizierern<br />

Kaum Probleme, ev. gehen Stellen verloren<br />

Ke<strong>in</strong>e Probleme.<br />

Auf maximalen Wert gesättigt falls Zahl ausserhalb Wertebereich,<br />

es gehen Stellen verloren.<br />

Verboten<br />

Verboten<br />

Zeiger behalten Adresse, Speicher<strong>in</strong>halt wird anders <strong>in</strong>terpretiert<br />

Integer enthält Adresse als Wert, sofern sie Platz hat, sonst nur<br />

Teil von Adresse<br />

Wert wird <strong>in</strong> Adresse umgewandelt<br />

Ke<strong>in</strong>e Probleme (Wenn man weiss was man tut)<br />

(z.B. volatile <strong>in</strong>t <strong>in</strong> <strong>in</strong>t, oder <strong>in</strong>t <strong>in</strong> const <strong>in</strong>t)<br />

Beispiele:<br />

<strong>in</strong>t a = 5, b = 2;<br />

float f = 0.0;<br />

<strong>in</strong>t c = 257;<br />

f = a / b; /* f ist 2 !!!! nicht etwa 2.5 weshalb? */<br />

f = (float) a / b; /* jetzt ist f 2.5 */<br />

f = (float) (a / b); /* jetzt ist f wieder 2 */<br />

b = (char)c; /* b ist nun 1, weshalb?? */<br />

f = a / 3.0; /* f ist jetzt 1.6666666 weshalb?? */<br />

c = a / 3.0; /* c ist jetzt 1 weshalb?? */<br />

c = a / 3.0 + 0.5; /* c ist jetzt 2 weshalb?? */<br />

c = a / 3 + 0.5; /* c ist jetzt 1 weshalb?? */<br />

Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 29/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!