0Pricing
Zig Academy · บทเรียน

พอยน์เตอร์แบบออปชันและ ?*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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ประกาศชนิดออปชัน
  2. แกะค่าอย่างปลอดภัยด้วย if และ orelse
  3. พอยน์เตอร์แบบออปชันและ ?*T
  4. null เทียบกับ undefined
← กลับไปที่ Zig Academy