C Datentypen
In der Sprache C beziehen sich Datentypen auf ein umfassendes System, das verwendet wird, um Variablen oder Funktionen unterschiedlicher Typen zu deklarieren. Der Typ einer Variablen bestimmt den Speicherplatz, den sie belegt, und wie das gespeicherte Bitmuster interpretiert wird.
Typen in C können in die folgenden Kategorien unterteilt werden:
| Laufende Nummer | Typen und Beschreibungen |
|---|---|
| 1 | Grundlegende Datentypen Sie sind arithmetische Typen, einschließlich Ganzzahl (int), Zeichen (char), Gleitkommazahl (float) und Gleitkommazahl mit doppelter Genauigkeit (double). |
| 2 | Aufzählungstypen: Sie sind ebenfalls arithmetische Typen und werden verwendet, um Variablen zu definieren, denen in einem Programm nur bestimmte diskrete Ganzzahlwerte zugewiesen werden können. |
| 3 | void-Typ: TypspezifizierervoidEin Datentyp, der keinen Wert repräsentiert und üblicherweise für Rückgabewerte von Funktionen verwendet wird. |
| 4 | Abgeleitete Typen: Einschließlich Array-Typen, Zeigertypen und Strukturtypen. |
Array-Typen und Struktur-Typen werden gemeinsam als Aggregattypen bezeichnet. Der Typ einer Funktion bezieht sich auf den Typ des Rückgabewerts der Funktion. Im folgenden Teil dieses Kapitels führen wir grundlegende Typen ein; die anderen Typen werden in späteren Kapiteln erläutert.
Ganzzahltypen
Die folgende Tabelle listet Details zu den Speichergrößen und Wertebereichen der Standard-Ganzzahltypen auf:
| Type | Speichergröße | Wertebereich |
|---|---|---|
| char | 1 Byte | -128 bis 127 oder 0 bis 255 |
| unsigned char | 1 Byte | 0 bis 255 |
| signed char | 1 Byte | -128 bis 127 |
| int | 2 oder 4 Bytes | -32,768 bis 32,767 oder -2,147,483,648 bis 2,147,483,647 |
| unsigned int | 2 oder 4 Bytes | 0 bis 65,535 oder 0 bis 4,294,967,295 |
| short | 2 Byte | -32,768 bis 32,767 |
| unsigned short | 2 Byte | 0 bis 65,535 |
| long | 4 Byte | -2,147,483,648 bis 2,147,483,647 |
| unsigned long | 4 Byte | 0 bis 4,294,967,295 |
Beachten Sie, dass die Speichergröße jedes Typs von der Bitanzahl des Systems abhängt, aber derzeit sind 64-Bit-Systeme der Standard.
Im Folgenden sind die Unterschiede in den Speichergrößen zwischen 32-Bit-Systemen und 64-Bit-Systemen aufgeführt (unter Windows identisch):
Um die genaue Größe eines Typs oder einer Variablen auf einer bestimmten Plattform zu ermitteln, können Sie densizeof-Operator verwenden. Der Ausdrucksizeof(type)liefert die Speichergröße in Bytes eines Objekts oder Typs. Das folgende Beispiel zeigt, wie man die Größe des Typs int ermittelt:
Beispiel
%luist eine 32-Bit-Ganzzahl ohne Vorzeichen, siehe Details unterC-Bibliotheksfunktion - printf()。
Wenn Sie das obige Programm unter Linux kompilieren und ausführen, erzeugt es die folgenden Ergebnisse:
int 存储大小 : 4
Gleitkommatypen
Die folgende Tabelle listet Details zu den Speichergrößen, Wertebereichen und der Genauigkeit von Standard-Gleitkommatypen auf:
| Type | Speichergröße | Wertebereich | Precision |
|---|---|---|---|
| float | 4 Byte | 1.2E-38 bis 3.4E+38 | 6 signifikante Stellen |
| double | 8 Bytes | 2.3E-308 bis 1.7E+308 | 15 signifikante Stellen |
| long double | 16 Bytes | 3.4E-4932 bis 1.1E+4932 | 19 signifikante Stellen |
Die Header-Datei float.h definiert Makros, mit denen Sie diese Werte und weitere Details zur binären Darstellung reeller Zahlen in Ihrem Programm verwenden können. Das folgende Beispiel gibt den Speicherplatz aus, den Gleitkommatypen belegen, sowie ihre Wertebereiche:
Beispiel
%Egibt reelle Zahlen mit einfacher und doppelter Genauigkeit in Exponentialform aus, siehe Details unterC-Bibliotheksfunktion - printf()。
Wenn Sie das obige Programm unter Linux kompilieren und ausführen, erzeugt es die folgenden Ergebnisse:
float 存储最大字节数 : 4 float 最小值: 1.175494E-38 float 最大值: 3.402823E+38 精度值: 6
void-Typ
Der void-Typ gibt an, dass kein Wert verfügbar ist. Er wird üblicherweise in den folgenden drei Situationen verwendet:
| Laufende Nummer | Typen und Beschreibungen |
|---|---|
| 1 | Funktion gibt nichts zurück In C geben verschiedene Funktionen keinen Wert zurück, oder man kann sagen, sie geben nichts zurück. Der Rückgabetyp einer Funktion, die keinen Wert zurückgibt, ist void. Zum Beispiel:void exit (int status); |
| 2 | Funktionsparameter sind leer In C akzeptieren verschiedene Funktionen keine Parameter. Eine Funktion ohne Parameter kann ein void akzeptieren. Zum Beispiel:int rand(void); |
| 3 | Zeiger zeigt auf void Ein Zeiger vom Typ void * repräsentiert die Adresse eines Objekts und nicht einen Typ. Zum Beispiel gibt die Speicherzuweisungsfunktionvoid *malloc( size_t size );einen Zeiger auf void zurück, der in jeden Datentyp umgewandelt werden kann. |
Wenn Sie den void-Typ jetzt noch nicht vollständig verstehen, machen Sie sich keine allzu großen Sorgen; wir werden diese Konzepte in späteren Kapiteln ausführlich erklären.
Typumwandlung
Typumwandlung ist das Konvertieren eines Werts eines Datentyps in einen Wert eines anderen Datentyps.
In C gibt es zwei Arten der Typkonvertierung:
-
Implizite Typkonvertierung:Implizite Typkonvertierung erfolgt automatisch in Ausdrücken ohne explizite Anweisung oder Funktionsaufruf. Normalerweise wird automatisch ein kleinerer Typ in einen größeren Typ umgewandelt, z. B. int in long oder float in double. Implizite Typkonvertierung kann auch zu Verlust der Datenpräzision oder Datenabschneidung führen.
-
Explizite Typkonvertierung:Explizite Typkonvertierung erfordert die Verwendung des Typumwandlungsoperators, mit dem ein Wert eines Datentyps in einen Wert eines anderen Datentyps umgewandelt werden kann. Erzwungene Typumwandlung ermöglicht es Programmierern, Datentypen bei Bedarf präziser zu steuern, kann aber auch zu Datenverlust oder Datenabschneidung führen.
Beispiel für implizite Typkonvertierung:
Beispiel
float f = 3.14;
double d = i + f; // int-Typ implizit in double-Typ konvertieren
Beispiel für explizite Typkonvertierung:
Beispiel
int i = (int)d; // double-Typ explizit in int-Typ konvertieren
