Zig 数据类型

Zig 支持多种数据类型,涵盖了整数、浮点数、布尔值、字符、数组、切片、结构体、枚举、联合体和指针等。

下表是 Zig 中各种数据类型的说明:

数据类型类别 数据类型示例 描述
整数类型 i8, i16, i32, i64, isize 有符号整数类型,isize是平台相关的大小。
无符号整数 u8, u16, u32, u64, usize 无符号整数类型,usize是平台相关的大小。
浮点数 f16, f32, f64, f128 IEEE 浮点数类型。
布尔类型 bool 布尔类型,值为true或false。
字符类型 char Unicode 标量值。
复合类型 array, vector 固定大小数组和可变大小数组。
指针类型 *T, *const T, *mut T 指向T类型值的指针,const为只读,mut为可变。
引用类型 &T, &const T, &mut T 对T类型值的引用,&const为只读,&mut为可变。
元组类型 (T1, T2, …) 包含固定数量和类型的值的有序集合。
可选类型 ?T 可以是null或者T类型值。
错误集合类型 error{…} 包含错误值的枚举类型。
函数类型 fn(T1, T2, …) -> R 接受参数并返回结果的函数类型。
结构体类型 struct { … } 包含多个字段的复合数据类型。
枚举类型 enum { … } 固定数量的命名值的集合。
联合体类型 union { … } 可以存储多种不同类型值的类型,但一次只能存储一个。
别名类型 alias T = U T是U的别名。

1、整数类型

Zig 提供了多种整数类型,包括有符号和无符号整数,大小从 8 位到 64 位不等。

实例

const std = @import("std");

pub fn main() void {
    const a: i8 = -128; // 8-bit signed integer
    const b: u8 = 255;  // 8-bit unsigned integer
    const c: i32 = -2147483648; // 32-bit signed integer
    const d: u64 = 18446744073709551615; // 64-bit unsigned integer

    std.debug.print("a: {}, b: {}, c: {}, d: {}\n", .{a, b, c, d});
}

2、浮点数类型

Zig 支持 f32 和 f64 两种浮点数类型。

实例

const std = @import("std");

pub fn main() void {
    const pi: f32 = 3.14;   // 32-bit floating point
    const e: f64 = 2.71828; // 64-bit floating point

    std.debug.print("pi: {}, e: {}\n", .{pi, e});
}

3、布尔类型

布尔类型使用 bool 表示,取值可以是 true 或 false。

实例

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、字符类型

字符类型使用 u8 来表示单个字符。

实例

const std = @import("std");

pub fn main() void {
    const letter: u8 = 'A';

    std.debug.print("letter: {}\n", .{letter});
}

5、数组和切片

数组是固定大小的,切片则是动态大小的数组。

实例

const std = @import("std");

pub fn main() void {
    const array: [5]i32 = [5]i32{1, 2, 3, 4, 5}; // 固定大小数组
    const slice: []const i32 = array[1..4]; // 切片

    std.debug.print("array: {}, slice: {}\n", .{array, slice});
}

6、结构体

结构体用 struct 定义,允许你创建复杂的数据类型。

实例

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、枚举

枚举用 enum 定义,允许你创建有命名值的类型。

实例

const std = @import("std");

const Color = enum {
    Red,
    Green,
    Blue,
};

pub fn main() void {
    const color: Color = Color.Green;

    std.debug.print("Color: {}\n", .{color});
}

8、联合体

联合体用 union 定义,允许你创建一个可以存储不同类型值的变量。

实例

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、指针

指针用 * 定义,可以指向特定类型的变量。

实例

const std = @import("std");

pub fn main() void {
    var a: i32 = 10;
    const p: *i32 = &a; // 指向 a 的指针

    std.debug.print("Value: {}, Pointer: {}\n", .{a, p.*});
}
作者:admin  创建时间:2024-10-23 03:42
最后编辑:admin  更新时间:2024-10-23 04:12
上一篇:
下一篇: