Zig Academy · บทเรียน

พอยน์เตอร์ค่าคงที่และการจัดแนว

แสดงการเข้าถึงแบบอ่านอย่างเดียวและการจัดวาง

บทเรียน 4 จาก 413 ขั้นตอน

พอยน์เตอร์ค่าคงที่และการจัดแนว เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

การเข้าถึงแบบอ่านอย่างเดียว

บ่อยครั้งคุณต้องการใช้ค่าร่วมกันโดยสัญญาว่าจะไม่เปลี่ยนค่า พอยน์เตอร์ constจึงอนุญาตให้อ่านได้ แต่ห้ามเขียน

ชนิด *const T

เขียนตัวชี้ไปยังข้อมูลที่เปลี่ยนแปลงไม่ได้เป็น *const T คุณสามารถอ่านค่าผ่านตัวชี้นี้ได้ แต่การกำหนดค่าให้เป้าหมายจะทำให้เกิดข้อผิดพลาดขณะคอมไพล์

const x: i32 = 5;
const p: *const i32 = &x;

Const เดินทางไปพร้อมกับ &

การหาที่อยู่ของค่าคงที่จะให้ผลเป็น *const T โดยอัตโนมัติ ดังนั้นชนิดข้อมูลจึงยังคงรักษาคุณสมบัติที่เปลี่ยนแปลงไม่ได้ไว้

const v: u8 = 9;
const p = &v; // *const u8

ชนิดที่เปลี่ยนแปลงได้แปลงเป็น Const ได้

*T แปลงเป็น *const T ได้โดยอิสระ เพราะการตัดสิทธิ์การเขียนออกย่อมปลอดภัยเสมอ ส่วนการแปลงย้อนกลับทำไม่ได้

var n: i32 = 1;
const ro: *const i32 = &n;

เหตุผลที่ควรเลือก const

การรับพารามิเตอร์ชนิด *const T เป็นการบอกผู้เรียกว่าฟังก์ชันจะอ่านค่าเท่านั้น ทำให้ไว้วางใจฟังก์ชันได้ง่ายขึ้น

fn show(p: *const i32) void {
    // read only
}

Alignment หมายถึงอะไร

ทุกชนิดข้อมูลมี alignment ซึ่งคือขอบเขตของที่อยู่ที่ข้อมูลต้องวางอยู่ โดยทั่วไป u32 ต้องการที่อยู่ที่หารด้วยสี่ลงตัว

สอบถามด้วย @alignOf

ฟังก์ชันในตัวภาษา @alignOf(T) จะคืนค่า alignment ที่ชนิดข้อมูลต้องการเป็นจำนวนไบต์ เช่นเดียวกับที่ @sizeOf คืนค่าขนาดของชนิดข้อมูล

const a = @alignOf(u32);

Alignment ในชนิดข้อมูล

คุณสามารถระบุ alignment ของตัวชี้ในชนิดข้อมูลได้ด้วย align เช่น *align(4) u8 เพื่อกำหนดให้ใช้ขอบเขตที่ระบุ

var p: *align(4) u8 = undefined;

เหตุผลที่ Alignment สำคัญ

ฮาร์ดแวร์อ่านข้อมูลที่จัดแนวถูกต้องได้เร็วกว่า และ CPU บางรุ่นจะ ทำงานผิดพลาด เมื่อเข้าถึงข้อมูลที่จัดแนวไม่ถูกต้อง Zig จึงติดตาม alignment ไว้ในชนิดข้อมูลเพื่อให้การทำงานถูกต้อง

การจัดแนวมากหรือน้อยเกินไป

ตัวชี้อาจรับรอง alignment ที่เข้มงวดกว่าค่าเริ่มต้นได้ แต่คุณไม่สามารถ ลดความเข้มงวด ลงได้หากไม่ใช้การแปลงชนิดอย่างชัดเจน เช่น @alignCast

Const และ align ทำงานร่วมกัน

คุณสมบัติทั้งสองทำงานร่วมกันได้อย่างเป็นธรรมชาติ: *const align(8) T คือตัวชี้แบบอ่านอย่างเดียวที่รับรองว่าจะอยู่บนขอบเขตแปดไบต์

ตรวจสอบความเข้าใจ

คุณเขียนฟังก์ชันที่ต้องอ่านค่าด้านหลังตัวชี้เท่านั้น ชนิดพารามิเตอร์ใดสื่อความหมายนี้ได้ดีที่สุด

สรุปทบทวน

ตัวชี้ *const T ใช้แบ่งปันข้อมูลแบบอ่านอย่างเดียวและแปลงมาจาก *T ได้ ส่วน alignment ซึ่งตรวจสอบได้ด้วย @alignOf และ align(n) ช่วยให้การเข้าถึงหน่วยความจำถูกต้องและรวดเร็ว 🎯

เริ่มต้นได้ฟรี

เรียนรู้ Zig ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “พอยน์เตอร์ค่าคงที่และการจัดแนว” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พอยน์เตอร์ค่าคงที่และการจัดแนว” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พอยน์เตอร์ค่าคงที่และการจัดแนว”

แสดงการเข้าถึงแบบอ่านอย่างเดียวและการจัดวาง คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “พอยน์เตอร์ค่าคงที่และการจัดแนว” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. พอยน์เตอร์ค่าเดียวด้วย *T
  2. การถอดการอ้างอิงด้วย ptr.*
  3. พอยน์เตอร์หลายค่าด้วย [*]T
  4. พอยน์เตอร์ค่าคงที่และการจัดแนว
← กลับไปที่ Zig Academy