Zig-Datentypen
Zig unterstützt mehrere Datentypen, darunter Ganzzahlen, Gleitkommazahlen, boolesche Werte, Zeichen, Arrays, Slices, Structs, Enums, Unions und Zeiger.
Die folgende Tabelle beschreibt die verschiedenen Datentypen in Zig:
| Datentypkategorie | Datentyp-Beispiele | Beschreibung |
|---|---|---|
| Ganzzahltypen | i8, i16, i32, i64, isize | Vorzeichenbehafteter Ganzzahltyp,isizedie Größe ist plattformabhängig. |
| Vorzeichenlose Ganzzahlen | u8, u16, u32, u64, usize | Vorzeichenloser Ganzzahltyp,usizedie Größe ist plattformabhängig. |
| Gleitkommazahlen | f16, f32, f64, f128 | IEEE-Gleitkommatypen. |
| Boolescher Typ | bool | Boolescher Typ, mit Wertentrueoderfalse。 |
| Zeichentyp | char | Unicode-Skalarwerte. |
| Zusammengesetzte Typen | array, vector | Arrays mit fester Größe und dynamisch dimensionierte Arrays. |
| Zeigertypen | *T, *const T, *mut T | Zeigt aufTeinen Wert des Typs,*constder schreibgeschützt ist,*mutder veränderbar ist. |
| Referenztypen | &T, &const T, &mut T | PairTReferenz auf einen Wert des Typs,&constder schreibgeschützt ist,&mutder veränderbar ist. |
| Tupeltypen | (T1, T2, ...) | Eine geordnete Sammlung von Werten mit fester Anzahl und festen Typen. |
| Optionale Typen | ?T | Kann seinnulloderTein Wert des Typs. |
| Fehler-Set-Typen | error{...} | Ein Enum-Typ, der Fehlerwerte enthält. |
| Funktionstypen | fn(T1, T2, ...) -> R | Ein Funktionstyp, der Parameter akzeptiert und ein Ergebnis zurückgibt. |
| Struct-Typen | struct { ... } | Ein zusammengesetzter Datentyp, der mehrere Felder enthält. |
| Enum-Typen | enum { ... } | Eine Sammlung einer festen Anzahl benannter Werte. |
| Union-Typen | union { ... } | Ein Typ, der Werte mehrerer unterschiedlicher Typen speichern kann, aber nur einen gleichzeitig. |
| Alias-Typen | alias T = U | TJaUAlias von. |
1. Ganzzahltypen
Zig bietet eine Vielzahl von Ganzzahltypen, darunter vorzeichenbehaftete und vorzeichenlose Ganzzahlen, mit Größen von 8 Bit bis 64 Bit.
Beispiel
pub fn main() void {
const a: i8 = -128; // 8-Bit-Ganzzahl mit Vorzeichen
const b: u8 = 255; // 8-Bit-Ganzzahl ohne Vorzeichen
const c: i32 = -2147483648; // 32-Bit-Ganzzahl mit Vorzeichen
const d: u64 = 18446744073709551615; // 64-Bit-Ganzzahl ohne Vorzeichen
std.debug.print("a: {}, b: {}, c: {}, d: {}\n", .{a, b, c, d});
}
Zig unterstützt zwei Gleitkommatypen: f32 und f64.
Beispiel
pub fn main() void {
const pi: f32 = 3.14; // 32-Bit-Gleitkommazahl
const e: f64 = 2.71828; // 64-Bit-Gleitkommazahl
std.debug.print("pi: {}, e: {}\n", .{pi, e});
}
3. Boolescher Typ
Der boolesche Typ wird durch bool dargestellt, und seine Werte können true oder false sein.
Beispiel
pub fn main() void {
const is_true: bool = true;
const is_false: bool = false;
std.debug.print("is_true: {}, is_false: {}\n", .{is_true, is_false});
}
4. Zeichentyp
Der Zeichentyp verwendet u8, um ein einzelnes Zeichen darzustellen.
Beispiel
pub fn main() void {
const letter: u8 = 'A';
std.debug.print("letter: {}\n", .{letter});
}
5. Arrays und Slices
Arrays haben eine feste Größe, während Slices dynamisch dimensionierte Arrays sind.
Beispiel
pub fn main() void {
const array: [5]i32 = [5]i32{1, 2, 3, 4, 5}; // Array mit fester Größe
const slice: []const i32 = array[1..4]; // Slice
std.debug.print("array: {}, slice: {}\n", .{array, slice});
}
6. Strukturen
Strukturen werden mit struct definiert, wodurch Sie komplexe Datentypen erstellen können.
Beispiel
const Point = struct {
x: i32,
y: i32,
};
pub fn main() void {
const p = Point{ .x = 10, .y = 20 };
std.debug.print("Point: ({}, {})\n", .{p.x, p.y});
}
7. Aufzählungen
Aufzählungen werden mit enum definiert, wodurch Sie Typen mit benannten Werten erstellen können.
Beispiel
const Color = enum {
Red,
Green,
Blau,
};
pub fn main() void {
const color: Color = Color.Green;
std.debug.print("Farbe: {}\n", .{color});
}
8. Unions
Unions werden mit union definiert, wodurch du eine Variable erstellen kannst, die Werte unterschiedlicher Typen speichern kann.
Beispiel
const Number = union(enum) {
Int: i32,
Float: f32,
};
pub fn main() void {
const num: Number = Number{ .Int = 10 };
switch (num) {
Number.Int => std.debug.print("Integer: {}\n", .{num.Int}),
Number.Float => std.debug.print("Float: {}\n", .{num.Float}),
}
}
9. Zeiger
Zeiger werden mit*definiert und können auf Variablen eines bestimmten Typs zeigen.
Beispiel
pub fn main() void {
var a: i32 = 10;
const p: *i32 = &a; // Zeiger auf a
std.debug.print("Value: {}, Pointer: {}"\n", .{a, p.*});
}