พอยน์เตอร์ค่าคงที่และการจัดแนว
แสดงการเข้าถึงแบบอ่านอย่างเดียวและการจัดวาง
พอยน์เตอร์ค่าคงที่และการจัดแนว เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พอยน์เตอร์ค่าเดียวด้วย *T
- การถอดการอ้างอิงด้วย ptr.*
- พอยน์เตอร์หลายค่าด้วย [*]T
- พอยน์เตอร์ค่าคงที่และการจัดแนว