ตัวชี้ C: ชี้ไปยังอาร์เรย์ที่มีขนาดคงที่
คำถามนี้ออกไปยังผู้เชี่ยวชาญด้าน C ที่นั่น: ใน C สามารถประกาศตัวชี้ได้ดังนี้: char (* p)[10]; .. ซึ่งโดยพื้นฐานแล้วระบุว่าตัวชี้นี้ชี้ไปที่อาร์เรย์ 10 ตัวอักษร สิ่งที่เรียบร้อยเกี่ยวกับการประกาศตัวชี้เช่นนี้คือคุณจะได้รับข้อผิดพลาดเวลาคอมไพล์หากคุณพยายามกำหนดตัวชี้ของอาร์เรย์ที่มีขนาดต่างกันให้กับ p นอกจากนี้ยังจะทำให้คุณมีข้อผิดพลาดเวลาคอมไพล์หากคุณพยายามกำหนดค่าของตัวชี้ถ่านให้กับ p ฉันลองใช้ gcc และดูเหมือนว่าจะใช้ได้กับ ANSI, C89 และ C99 สำหรับฉันแล้วดูเหมือนว่าการประกาศตัวชี้แบบนี้จะมีประโยชน์มากโดยเฉพาะอย่างยิ่งเมื่อส่งตัวชี้ไปยังฟังก์ชัน โดยปกติผู้คนจะเขียนต้นแบบของฟังก์ชันเช่นนี้: void foo(char * p, int plen); หากคุณคาดหวังว่าจะมีบัฟเฟอร์ที่มีขนาดเฉพาะคุณก็แค่ทดสอบค่าของ plen อย่างไรก็ตามคุณไม่สามารถรับประกันได้ว่าบุคคลที่ส่ง p ถึงคุณจะให้ตำแหน่งหน่วยความจำที่ถูกต้องในบัฟเฟอร์นั้น คุณต้องเชื่อมั่นว่าบุคคลที่เรียกว่าฟังก์ชันนี้ทำในสิ่งที่ถูกต้อง ในทางกลับกัน: void foo(char (*p)[10]); .. จะบังคับให้ผู้โทรให้บัฟเฟอร์ตามขนาดที่กำหนด ดูเหมือนว่ามีประโยชน์มาก แต่ฉันไม่เคยเห็นตัวชี้ที่ประกาศแบบนี้ในรหัสใด ๆ ที่ฉันเคยพบ คำถามของฉันคือมีเหตุผลใดบ้างที่คนไม่ประกาศคำชี้เช่นนี้? ฉันไม่เห็นข้อผิดพลาดที่ชัดเจนหรือไม่?