C legt großen Wert darauf, was im Speicher gespeichert wird. Es errät nicht. Sie müssen ihm genau mitteilen, welche Art von Daten Sie speichern. Das ist nicht nur Pedanterie. Es wirkt sich darauf aus, wie Ihr Programm ausgeführt wird, wie viel Speicher es verwendet und ob Ihre Berechnungen richtig oder fehlerhaft ausfallen.
Die Standardvariablentypen
In C gibt es drei Standardvariablentypen.
Ganzzahl: int
Dies ist eine 4-Byte-Ganzzahl. Es verarbeitet ganze Zahlen.
Gleitkomma: float
Dies ist ein 4-Byte-Gleitkommawert. Es verarbeitet Dezimalzahlen.
Charakter: char
Dies ist ein 1-Byte-Einzelzeichen. Denken Sie an „a“ oder „3“. Ein String in C ist nur ein Array dieser Zeichen.
Dann gibt es abgeleitete Typen. Sie verwenden sie, wenn die Standard-Dreier nicht ausreichen.
double: Ein 8-Byte-Gleitkommawert. Mehr Präzision.kurz: Eine 2-Byte-Ganzzahl. Weniger Speicher, weniger Reichweite.`unsigned shortoderunsigned int: Diese verarbeiten nur positive Ganzzahlen. Kein Vorzeichenbit. Wenn Sie Bevölkerungszahlen oder Paketgrößen verfolgen müssen, ist dies oft die richtige Wahl.
Operatoren und Operatorpriorität
Die Operatoren in C kommen mir bekannt vor.
+-Zusatz-Subtraktion/Division*Multiplikation%mod
Aber achten Sie auf die Spaltung. Der Operator „/“ führt eine Ganzzahldivision durch, wenn beide Operanden Ganzzahlen sind. Andernfalls wird eine Gleitkommadivision durchgeführt.
Schauen Sie sich diesen Code an:
„c
void main() {
float a;
a = 10 / 3;
printf(“%f\n”, a);
}
„
Es wird ein Gleitkommawert ausgegeben, da „a“ als Typ „float“ deklariert ist. Aber „a“ wird 3,0 sein. Warum? Weil der Code zuerst eine ganzzahlige Division durchführte. 10 dividiert durch 3 ist 3. Das Ergebnis ist 3. Dann wird diese 3 in 3,0 umgewandelt, wenn sie in „a“ gespeichert wird. Die Präzision ging verloren, bevor sie überhaupt die Variable erreichte.
Operatorpriorität in C folgt Standardregeln. Division und Multiplikation erfolgen vor Addition und Subtraktion.
Das Ergebnis von „5+34“ ist 17. Nicht 32. Der „ “-Operator hat eine höhere Priorität als „+“. Sie können dies mit Klammern überschreiben. „(5+3)*4“ ist 32. „5+3“ wird zuerst ausgewertet.
Der Vorrang wird später chaotisch. Sobald Zeiger in den Chat gelangen, wird es kompliziert. Aber denken Sie vorerst daran: Multiplizieren und dividieren Sie, bevor Sie addieren und subtrahieren.
Typisierung
Mit C können Sie Typen im Handumdrehen konvertieren. Dies geschieht häufig mit Zeigern. Bei bestimmten Typen geschieht dies auch automatisch bei der Zuweisung.
Im obigen Beispiel wurde das ganzzahlige Ergebnis „10/3“ automatisch in eine Gleitkommazahl konvertiert. Aber was wäre, wenn Sie die Dezimalzahl wollten?
Sie führen eine Typumwandlung durch, indem Sie den Typnamen in Klammern vor den Wert setzen.
Ersetzen Sie „a=10/3;“ durch „a=(float)10/3;“.
Jetzt ist „a“ 3,33333. Die 10 wird vor der Division in einen Gleitkommawert umgewandelt. Die Division erfolgt im Gleitkomma-Land. Das Ergebnis behält seine Nachkommastellen.
Typdefinition
Sie können benannte, benutzerdefinierte Typen in C mit der typedef -Anweisung deklarieren. Dies ist im C-Code üblich.
„c
typedef int boolean;
void main() {
boolescher b;
b = FALSCH;
// bla bla bla
}
„
Damit können Sie boolesche Typen deklarieren. C hat in älteren Standards keinen nativen „bool“-Typ, daher ist dies eine Problemumgehung.
Wenn Ihnen das Wort „float“ nicht gefällt, können Sie sagen:
„c
typedef float real;
„
Dann später:
„c
real r1, r2, r3;
„
Platzieren Sie „typedef“-Anweisungen an einer beliebigen Stelle im Programm. Stellen Sie einfach sicher, dass sie vor dem ersten Gebrauch geliefert werden.
Strukturen
Strukturen in C gruppieren Variablen in einem Paket.
„c
struct rec {
int a, b, c;
float d, e, f;
};
struct rec r;
„
Wann immer Sie Strukturen vom Typ „rec“ deklarieren möchten, müssen Sie „struct rec“ sagen. Das vergisst man leicht. Sie erhalten Compilerfehler, wenn Sie die „Struktur“ weglassen.
Sie können den Code komprimieren:
„c
struct rec {
int a, b, c;
float d, e, f;
} R;
„
Hier werden die Typdeklaration und die Variable „r“ in derselben Anweisung deklariert.
Oder verwenden Sie „typedef“ für den Strukturnamen. Wenn Sie es hassen, jedes Mal „struct rec r“ einzugeben:
„c
typedef struct rec rec_type;
„
Dann deklarieren Sie die Aufzeichnungen, indem Sie sagen:
„c
rec_type r;
„
Greifen Sie mit einem Punkt auf Felder zu. r.a = 5;.
Arrays
Sie deklarieren Arrays, indem Sie nach der normalen Deklaration eine Größe einfügen.
„c
int a[10]; / Array von Ganzzahlen /
char s[100]; / Array von Zeichen (ein C-String) /
float f[20]; / Array von reellen Zahlen /
struct rec r[50]; / Array von Datensätzen /
„
Arrays sind zusammenhängende Speicherblöcke. Der Zugriff auf einen Index außerhalb der Grenzen ist ein undefiniertes Verhalten. Es könnte abstürzen. Es könnte Daten beschädigen. Es könnte so aussehen, als würde es funktionieren, bis es nicht mehr funktioniert.
Inkrementieren
C verfügt über Verknüpfungen für allgemeine Vorgänge.
i = i + 1;wird zui++;- „i = i – 1;“ wird zu „i–;“.
- „i = i + 3;“ wird zu „i += 3;“.
i = i * j;wird zui *= j;
Dabei handelt es sich nicht nur um syntaktischen Zucker. Sie kompilieren häufig zu effizienterem Maschinencode. Benutze sie.
Zu vermeidende C-Fehler
Der Operator „/“ mit zwei Ganzzahlen ist eine Falle. Der Dezimalteil wird abgeschnitten. Überprüfen Sie immer Ihre Typen, bevor Sie teilen. Wenn Sie Präzision benötigen, wandeln Sie zuerst einen Operanden in „float“ oder „double“ um.
Denken Sie daran, wann immer Sie es verwenden. Andernfalls sind Ihre Zahlen falsch. Und das Debuggen von Problemen mit der Ganzzahldivision ist mühsam.
Probieren Sie es aus
- Experimentieren Sie mit der Typisierung. Versuchen Sie es mit „int“, „char“, „float“. Sehen Sie, was passiert, wenn Sie sie mischen.
- Erstellen Sie ein Array von Datensätzen. Schreiben Sie Code, um dieses Array nach einem ganzzahligen Feld zu sortieren. Es bringt Ihnen etwas über Zeiger, Speicherlayout und Kontrollfluss bei.
In C kommt es auf die Details an. Fehlt ein Typ, bricht das gesamte Programm ab. Wenn Sie es richtig machen, läuft es schnell.


























