当前位置: 首页 > news >正文

HoRain云--Zig编程:数组与切片全解析

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

一、数组(Array)

1. 定义

2. 特性

3. 常用操作

二、切片(Slice)

1. 定义

2. 切片的结构

3. 创建切片

4. 可变切片

三、数组 vs 切片对比

四、数组 → 切片(非常常见)

五、切片 → 数组指针

六、字符串与切片

七、常见陷阱

1. 悬垂切片

2. 数组不能直接赋值给切片变量

八、多维数组与切片

九、什么时候用哪个?


在 Zig 中,数组(Array)切片(Slice)是处理连续数据的两种核心类型,它们在内存、生命周期和使用方式上有明显区别。下面系统介绍。


一、数组(Array)

1. 定义

数组是长度固定编译期已知的连续内存块。

const arr: [5]u8 = .{1, 2, 3, 4, 5};

2. 特性

3. 常用操作

const std = @import("std"); var a = [_]u32{10, 20, 30}; // 自动推断长度 _ = a.len; // 3 _ = a[0]; // 10 for (a) |v| { std.debug.print("{}\n", .{v}); }

二、切片(Slice)

1. 定义

切片是对一段连续内存的视图,由指针 + 长度组成。

const slice: []u8 = &arr;

2. 切片的结构

本质上等价于:

struct { ptr: [*]T, len: usize, }

3. 创建切片

const arr = [_]u8{1, 2, 3, 4}; const s1 = arr[0..]; // 全部 const s2 = arr[1..3]; // [2, 3]

4. 可变切片

var buffer: [4]u8 = undefined; var slice = buffer[0..]; slice[0] = 42;

三、数组 vs 切片对比

特性

数组[N]T

切片[]T

长度

编译期固定

运行期可变

内存

直接存储数据

只引用数据

拷贝

深拷贝

浅拷贝

是否拥有内存

常见用途

栈分配、固定数据

函数参数、动态数据


四、数组 → 切片(非常常见)

几乎所有 API 都接受切片:

fn sum(s: []const u32) u32 { var total: u32 = 0; for (s) |v| total += v; return total; } const arr = [_]u32{1, 2, 3}; _ = sum(&arr); // ✅ 数组转切片

五、切片 → 数组指针

有时需要固定长度:

const arr_ptr: *[4]u8 = &buffer;

⚠️ 必须长度匹配,否则编译错误。


六、字符串与切片

Zig 的字符串字面量是:

"hello" // 类型是 *const [5:0]u8

转为切片:

const s: []const u8 = "hello";

七、常见陷阱

1. 悬垂切片

fn bad() []u8 { var x: [4]u8 = undefined; return x[0..]; // ❌ 返回局部变量引用 }

✅ 正确做法:由调用者提供内存,或使用堆分配。

2. 数组不能直接赋值给切片变量

var slice: []u8 = undefined; slice = buffer; // ✅ 正确

八、多维数组与切片

const matrix: [3][3]f32 = .{ .{1, 0, 0}, .{0, 1, 0}, .{0, 0, 1}, }; const row: []const f32 = &matrix[0];

九、什么时候用哪个?


如果你愿意,我可以继续讲:

只要告诉我你想深入哪一部分 👍

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.jsqmd.com/news/767738/

相关文章:

  • 告别逐帧重建:4D Gaussian Splatting如何用一套‘标准模型’搞定动态场景?
  • Node.js GraphQL API 开发脚手架:基于TypeScript与Prisma的快速启动指南
  • 腾讯朱雀开源AI安全平台A.I.G:一站式红队测试与漏洞扫描实战
  • 2026年质量好的德国高端眼镜/体制内高端眼镜精选推荐公司 - 品牌宣传支持者
  • 一文讲清AI相关专业名词
  • 透明底图制作方法大全:2026年最实用的AI抠图工具推荐
  • 语雀文档批量导出的终极解决方案:3步实现免费高效本地备份
  • 告别数据丢失!FPGA与USB2.0高速通信的实战避坑指南(基于Cypress FX2LP)
  • Pearcleaner终极指南:5分钟彻底清理Mac残留文件,免费开源更安心
  • Renesas RZ/T2M双核Cortex-R52在工业控制中的应用
  • LLM在CUDA编程中的表现与优化实践
  • 深入浅出:MCP (Model Context Protocol) 协议如何重塑 AI Agent 的生态
  • AISMM医疗模型落地失败率高达68%?揭秘三甲医院绕不开的4类数据断层与2套联邦学习加固方案
  • 2026年4月大厂制造圆顶通风口加工厂家推荐,扇形风帽/仿生鸟翼形风帽/排风烟道风帽,圆顶通风口非标定制哪家好 - 品牌推荐师
  • CSS四大选择器:90%的人只用到前两个,第三个能让你代码效率翻倍!
  • 百度网盘直链解析终极指南:告别限速困扰,实现满速下载
  • 2025年各国地理距离、与中国地理距离
  • 别再混淆了!一次搞懂CIE Lab、LCh、XYZ和sRGB的区别与转换(附C++代码验证)
  • 什么是RWS责任羊毛认证?懂羊毛的人,都认准这枚「良心标识」
  • Selenium爬虫实战:用User Data绕过登录验证,5分钟搞定需要插件的网站访问
  • 基于STM32的智能宿舍管理系统设计与实现
  • VPS 遭遇 CC 攻击怎么配置 Cloudflare 防护
  • 现代GraphQL服务开发:从Apollo Server到TypeORM的完整工程实践
  • 从零开始理解RISC-V:RV32I/RV64I基础指令集到底在做什么?
  • GitHub终极汉化方案:5分钟让英文GitHub秒变中文的高效插件
  • skene-cookbook:700+AI技能库,一键部署Claude/Cursor提示词工程自动化
  • 专业级GPU显存稳定性检测:5分钟掌握memtest_vulkan硬件测试完整指南
  • Arm Cortex-R82处理器架构与关键系统寄存器解析
  • 告别大模型!用DTTNet这个轻量级框架,在普通显卡上也能玩转音源分离
  • 彻底告别开机烦恼:TranslucentTB任务栏透明工具自启动完全指南