Zig 是一种强类型系统编程语言,提供丰富的数据类型,包括整数、浮点数、布尔值、数组、指针、结构体、联合体等。本文详细介绍 Zig 的数据类型及其用法。


目录

  1. 整数类型
  2. 浮点数类型
  3. 布尔类型
  4. 数组
  5. 指针
  6. 切片(Slice)
  7. 结构体
  8. 联合体
  9. 枚举
  10. 错误类型
  11. 可选类型
  12. 类型别名
  13. 参考资料

1. 整数类型

Zig 提供 有符号整数无符号整数,支持从 8 位到 64 位的不同大小。

整数类型表

类型说明取值范围(有符号/无符号)
i88 位有符号整数-128 ~ 127
u88 位无符号整数0 ~ 255
i1616 位有符号整数-32,768 ~ 32,767
u1616 位无符号整数0 ~ 65,535
i3232 位有符号整数-2,147,483,648 ~ 2,147,483,647
u3232 位无符号整数0 ~ 4,294,967,295
i6464 位有符号整数-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
u6464 位无符号整数0 ~ 18,446,744,073,709,551,615

示例

1
2
3
const a: i32 = -42;  // 32 位有符号整数
const b: u64 = 100;  // 64 位无符号整数
const c: i8 = 127;   // 8 位整数

2. 浮点数类型

Zig 仅支持 IEEE 754 规范的浮点数类型:

类型说明精度
f1616 位浮点数低精度
f3232 位浮点数单精度
f6464 位浮点数双精度
f128128 位浮点数高精度

示例

1
2
const pi: f64 = 3.1415926535;
const small: f32 = 1.5;

3. 布尔类型

布尔值在 Zig 中由 bool 表示,仅有 truefalse 两个取值。

示例

1
2
const is_valid: bool = true;
const has_error: bool = false;

4. 数组

数组的大小是固定的,定义时必须指定元素类型和长度。

示例

1
const numbers: [5]i32 = [_]i32{1, 2, 3, 4, 5};

Zig 还支持 自动推导数组

1
const arr = [_]u8{10, 20, 30};

5. 指针

Zig 使用 * 来表示指针。

示例

1
2
const a: i32 = 42;
const ptr: *const i32 = &a;

6. 切片(Slice)

切片是一种动态大小的数组,可以用于传递变长数据。

示例

1
const slice: []const u8 = "Hello, Zig!";

7. 结构体

结构体(Struct)用于定义自定义数据类型。

示例

1
2
3
4
5
6
const Person = struct {
    name: []const u8,
    age: u8,
};
 
const john = Person{ .name = "John", .age = 25 };

8. 联合体

联合体(Union)允许多个不同类型的数据共享同一块内存。

示例

1
2
3
4
5
6
const Value = union(enum) {
    int: i32,
    float: f32,
};
 
const v = Value{ .int = 42 };

9. 枚举

枚举(Enum)用于定义一组命名常量。

示例

1
2
const Color = enum { red, green, blue };
const my_color: Color = Color.red;

10. 错误类型

Zig 提供了 error 类型进行错误处理。

示例

1
2
3
4
fn divide(a: i32, b: i32) !i32 {
    if (b == 0) return error.DivisionByZero;
    return a / b;
}

11. 可选类型

可选类型用于表示值可能为空(null)。

示例

1
2
const maybe_value: ?i32 = null;
const number: ?i32 = 42;

12. 类型别名

Zig 允许创建类型别名,提高代码可读性。

示例

1
2
const MyInt = i32;
const value: MyInt = 100;

13. 参考资料


以上是 Zig 语言的主要数据类型,掌握这些数据类型可以帮助你更高效地使用 Zig 进行系统级编程! 🚀