การเดาครั้งแรกของฉันสำหรับเหตุผลนั้นเป็นเพราะประสิทธิภาพและเหตุผลในการประหยัดหน่วยความจำและเพื่อความสะดวกในการใช้งานคอมไพเลอร์เช่นกัน ผ่านอาร์เรย์ขนาดใหญ่ "ตามค่า" ดูเหมือนว่าจะมีผลกระทบอย่างมากที่กองมันต้องดำเนินการคัดลอกอาร์เรย์เต็มรูปแบบสำหรับการเรียกใช้ฟังก์ชั่นแต่ละครั้งและอาจคอมไพเลอร์จะต้องฉลาดขึ้นเพื่อส่งออกรหัสประกอบที่ถูกต้อง . นอกจากนี้ยังเป็นการยากยิ่งขึ้นที่จะรักษาอาร์เรย์ที่จัดสรรแบบไดนามิกเช่นเดียวกับอาร์เรย์ที่จัดสรรแบบคงที่ (จากมุมมองของไวยากรณ์ของภาษา)
แก้ไข: หลังจากที่ได้อ่านบางส่วนจากการเชื่อมโยงนี้ผมคิดว่าเหตุผลที่แท้จริง (และเหตุผลที่ว่าทำไมอาร์เรย์ใน structs จะถือว่าเป็นประเภทค่าในขณะที่อาร์เรย์ แต่เพียงผู้เดียวไม่ได้) คือความเข้ากันได้ย้อนกลับไปยัง C ของบรรพบุรุษ B นี่คือการอ้างอิงจาก Dennis Ritchie:
[... } การแก้ปัญหาประกอบด้วยการกระโดดที่สำคัญในห่วงโซ่วิวัฒนาการระหว่าง BCPL ที่ไม่มีตัวตนและการพิมพ์ C มันกำจัดรูปแบบของตัวชี้ในที่เก็บข้อมูลและทำให้เกิดการสร้างตัวชี้เมื่อชื่ออาเรย์ถูกกล่าวถึงในนิพจน์ กฎที่ยังคงอยู่ใน C ของวันนี้คือค่าของประเภทอาเรย์จะถูกแปลงเมื่อปรากฏเป็นนิพจน์ให้เป็นพอยน์เตอร์ของออบเจ็กต์แรกที่สร้างอาเรย์
สิ่งประดิษฐ์นี้เปิดใช้งานรหัส B ที่มีอยู่ส่วนใหญ่เพื่อให้ทำงานได้ต่อไปแม้จะมีการเปลี่ยนแปลงพื้นฐานในความหมายของภาษา [ .. ]