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语言中的字符型数据类型及其应用
204 0
|
存储 Linux C语言
05 C语言 - 数据类型
05 C语言 - 数据类型
49 0
|
1月前
|
存储 编译器 Go
go语言中的变量、常量、数据类型
【11月更文挑战第3天】
31 9
|
1月前
|
Go
go语言的浮点型常量
【10月更文挑战第21天】
26 4
|
2月前
|
存储 编译器 程序员
C语言数据类型详解
C语言数据类型详解
|
6月前
|
存储 Rust 自然语言处理
Rust标量类型详解
Rust标量类型详解
|
7月前
|
存储 程序员 编译器
C语言的数据类型
C语言的数据类型
75 0
|
7月前
|
存储 程序员 数据处理
C语言数据类型的深入探索
C语言数据类型的深入探索
32 0
|
7月前
|
存储 Rust 编译器
Rust变量与数据类型
Rust变量与数据类型
|
存储 安全 C语言
教你快速上手C语言中的数据类型和变量
教你快速上手C语言中的数据类型和变量
94 0