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:

DatentypkategorieDatentyp-BeispieleBeschreibung
Ganzzahltypeni8, i16, i32, i64, isizeVorzeichenbehafteter Ganzzahltyp,isizedie Größe ist plattformabhängig.
Vorzeichenlose Ganzzahlenu8, u16, u32, u64, usizeVorzeichenloser Ganzzahltyp,usizedie Größe ist plattformabhängig.
Gleitkommazahlenf16, f32, f64, f128IEEE-Gleitkommatypen.
Boolescher TypboolBoolescher Typ, mit Wertentrueoderfalse。
ZeichentypcharUnicode-Skalarwerte.
Zusammengesetzte Typenarray, vectorArrays mit fester Größe und dynamisch dimensionierte Arrays.
Zeigertypen*T, *const T, *mut TZeigt aufTeinen Wert des Typs,*constder schreibgeschützt ist,*mutder veränderbar ist.
Referenztypen&T, &const T, &mut TPairTReferenz 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?TKann seinnulloderTein Wert des Typs.
Fehler-Set-Typenerror{...}Ein Enum-Typ, der Fehlerwerte enthält.
Funktionstypenfn(T1, T2, ...) -> REin Funktionstyp, der Parameter akzeptiert und ein Ergebnis zurückgibt.
Struct-Typenstruct { ... }Ein zusammengesetzter Datentyp, der mehrere Felder enthält.
Enum-Typenenum { ... }Eine Sammlung einer festen Anzahl benannter Werte.
Union-Typenunion { ... }Ein Typ, der Werte mehrerer unterschiedlicher Typen speichern kann, aber nur einen gleichzeitig.
Alias-Typenalias T = UTJaUAlias von.

1. Ganzzahltypen

Zig bietet eine Vielzahl von Ganzzahltypen, darunter vorzeichenbehaftete und vorzeichenlose Ganzzahlen, mit Größen von 8 Bit bis 64 Bit.

Beispiel

const std = @import("std");

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});
}
2. Gleitkommatypen

Zig unterstützt zwei Gleitkommatypen: f32 und f64.

Beispiel

const std = @import("std");

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

const std = @import("std");

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

const std = @import("std");

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

const std = @import("std");

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 std = @import("std");

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 std = @import("std");

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 std = @import("std");

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

const std = @import("std");

pub fn main() void {
    var a: i32 = 10;
    const p: *i32 = &a; // Zeiger auf a

    std.debug.print("Value: {}, Pointer: {}"\n", .{a, p.*});
}
Andere Erweiterungen