undefined 与未初始化内存
在获得值之前预留存储空间。
undefined 与未初始化内存 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。
先预留空间
有时您想在拥有要存入的值之前先预留存储空间。Zig 为此提供了 undefined 关键字。
认识 undefined
写下 undefined 会声明一个绑定,其内存已经预留,但暂时还没有有意义的值。您需要承诺很快为它赋值。
var buffer: [16]u8 = undefined;这是一项承诺
undefined 表示您承诺会在读取之前赋予它真实值。如果先读取,就会得到垃圾值,即未指定的位模式。
常用于缓冲区
即将填充的固定数组就是典型情况。您先确定buffer 的大小,将其设为 undefined,然后逐个元素写入。
var line: [256]u8 = undefined;安全机制会帮助您发现问题
在 Debug 和 ReleaseSafe 模式下,Zig 会用 0xAA 字节填充 undefined 内存。这个明显的模式有助于发现意外的提前读取。
先赋值,再读取
规则很简单:读取 undefined 绑定之前,务必先写入真实值。先读取是 Zig 希望您避免的错误。
var x: i32 = undefined;
x = 42;undefined 不等于 null
undefined 表示尚未初始化的内存,而 null 表示可选值中有意表示缺失的值。它们解决的是完全不同的问题。
跳过清零的成本
让大型存储空间保持 undefined,可以避免写入不需要的零值所带来的开销。这是有意为之的性能选择,而不是偷懒。
字段也可以是 undefined
如果计划稍后设置结构体字段,也可以让它一开始为 undefined。重点在于明确、诚实地表示未初始化状态。
var p: Point = undefined;谨慎使用
大多数绑定从一开始就应该持有真实值。只有在确实需要预留原始存储空间时,才使用 undefined。
显式优于隐藏
其他语言可能会让变量悄悄保持未初始化状态。Zig 会将其明确表示出来,让任何阅读代码的人都能清楚地看到意图。
快速检查
您写下 var x: i32 = undefined;,然后在给 x 赋值之前读取它。您做了什么?
回顾
您了解到,undefined 会预留没有值的存储空间,常用于缓冲区。务必先赋值再读取,并记住它与 null 不同。📦
常见问题解答
「undefined 与未初始化内存」课时是免费的吗?
是的 — 「undefined 与未初始化内存」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。
「undefined 与未初始化内存」这节课中我会学到什么?
在获得值之前预留存储空间。 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Zig Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Zig Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「undefined 与未初始化内存」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Zig Academy 课中编写并运行代码吗?
能。每节 Zig Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 const 保存永不改变的值
- 使用 var 保存可变状态
- 类型推断与显式类型
- undefined 与未初始化内存