Zig 数据类型

简介: Zig 数据类型

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

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

数据类型类别 数据类型示例 描述
整数类型 i8, i16, i32, i64, isize 有符号整数类型,isize是平台相关的大小。
无符号整数 u8, u16, u32, u64, usize 无符号整数类型,usize是平台相关的大小。
浮点数 f16, f32, f64, f128 IEEE 浮点数类型。
布尔类型 bool 布尔类型,值为truefalse
字符类型 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 TU的别名。

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

}

目录
相关文章
|
7月前
|
C语言 开发者
C语言中如何精确实现数组元素的插入
C语言中如何精确实现数组元素的插入
|
19天前
|
C语言
Zig 运算符
Zig 运算符
28 1
|
18天前
|
编译器
Zig 函数
Zig 函数
25 1
|
22天前
|
存储 编译器 CDN
Zig 变量和常量
Zig 变量和常量
14 3
|
18天前
|
安全
Zig 结构体和枚举
Zig 结构体和枚举
22 0
|
18天前
|
存储 索引
Zig 数组和切片
Zig 数组和切片
19 0
|
7月前
|
存储 安全 编译器
C语言中的枚举类型与整数常量:差异与处理
C语言中的枚举类型与整数常量:差异与处理
128 2
|
7月前
|
存储 C语言 索引
C语言——构造数据类型
C语言——构造数据类型
98 0
|
7月前
|
存储 C语言
C语言中变量的使用和数据类型的交换
C语言中变量的使用和数据类型的交换
43 0
|
BI C语言
c语言行列的互换及常见的错误类型
c语言行列的互换及常见的错误类型