พอยน์เตอร์แบบออปชันและ ?*T
รวมพอยน์เตอร์เข้ากับความเป็นออปชัน
พอยน์เตอร์แบบออปชันและ ?*T เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
พอยน์เตอร์ก็เป็น Optional ได้
โดยปกติพอยน์เตอร์ต้องชี้ไปยังค่าที่ถูกต้องเสมอ แต่เมื่อทำให้เป็น optional ก็จะมีวิธีที่ถูกต้องในการสื่อว่ายังไม่มีค่า
รูปแบบ ?*T
ชนิด ?*T อ่านได้ว่าเป็นพอยน์เตอร์แบบ optional ที่ชี้ไปยัง T ซึ่งอาจชี้ไปยังค่าจริงหรือเก็บค่า null
var node: ?*Node = null;พอยน์เตอร์ null ที่ปลอดภัย
นี่คือคำตอบของ Zig สำหรับพอยน์เตอร์ null ในภาษา C พอยน์เตอร์อาจไม่มีค่าได้ แต่ optional จะบังคับให้คุณตรวจสอบก่อนอ้างอิงค่าที่พอยน์เตอร์ชี้ไป
แกะค่าก่อนติดตามพอยน์เตอร์
คุณไม่สามารถอ้างอิงค่า ?*T โดยตรงได้ ก่อนอื่นต้อง แกะค่า ด้วย if หรือ orelse เพื่อให้ได้พอยน์เตอร์ปกติที่อยู่ภายใน
if (node) |p| {
use(p.*);
}การจับค่าให้พอยน์เตอร์จริง
ภายในการจับค่าของ if ชื่อดังกล่าวจะเป็น *Node ปกติ พร้อมให้อ้างอิงด้วย .* ได้เช่นเดียวกับพอยน์เตอร์ที่ไม่ใช่ optional
if (head) |p| {
const value = p.*;
}เหมาะกับโครงสร้างเชื่อมโยง
พอยน์เตอร์แบบ optional มีประโยชน์อย่างมากกับ รายการเชื่อมโยง และต้นไม้ ซึ่งฟิลด์ถัดไปหรือลูกจะเป็น null เมื่อถึงปลายสาย
const Node = struct { next: ?*Node };Null ทำเครื่องหมายจุดสิ้นสุด
เมื่อเดินผ่านรายการ ฟิลด์ถัดไปที่เป็น null จะบอกอย่างชัดเจนว่าคุณมาถึงโหนดสุดท้ายแล้วและควรหยุด
Zig เก็บแท็กไว้ในพอยน์เตอร์
สำหรับพอยน์เตอร์ Zig จะเก็บสถานะ null ไว้ในค่าพอยน์เตอร์เอง ดังนั้น ?*T จึงไม่ใช้พื้นที่เพิ่มจากพอยน์เตอร์ปกติ
พอยน์เตอร์ Optional แบบค่าคงที่
คุณสามารถรวมการอ่านอย่างเดียวกับ optional ได้: ?*const T คือพอยน์เตอร์แบบ optional ที่คุณอ่านได้แต่เขียนไม่ได้
var view: ?*const u8 = null;ยังคงไม่มีการหยุดทำงานแบบไม่คาดคิด
เนื่องจากชนิดระบุว่าอาจเป็น null คอมไพเลอร์จึงไม่ยอมให้คุณ ลืม ตรวจสอบ ต่างจากการอ้างอิงพอยน์เตอร์ดิบในภาษา C
เดินผ่านสายโซ่
ลูป while ที่จับพอยน์เตอร์ถัดไปแบบ optional แต่ละตัว เป็นวิธีมาตรฐานในการ เดินผ่าน รายการจนกว่าจะพบ null
while (cur) |n| {
cur = n.next;
}ตรวจสอบอย่างรวดเร็ว
ชนิด ?*Node อธิบายอะไร
สรุป
คุณได้เรียนรู้ ?*T: พอยน์เตอร์แบบ optional ที่ปลอดภัย ให้แกะค่าก่อนอ้างอิง และใช้ null ทำเครื่องหมายจุดสิ้นสุดของโครงสร้างเชื่อมโยง 🔗
คำถามที่พบบ่อย
บทเรียน “พอยน์เตอร์แบบออปชันและ ?*T” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พอยน์เตอร์แบบออปชันและ ?*T” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พอยน์เตอร์แบบออปชันและ ?*T”
รวมพอยน์เตอร์เข้ากับความเป็นออปชัน คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “พอยน์เตอร์แบบออปชันและ ?*T” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ประกาศชนิดออปชัน
- แกะค่าอย่างปลอดภัยด้วย if และ orelse
- พอยน์เตอร์แบบออปชันและ ?*T
- null เทียบกับ undefined