Dugaan pertama saya untuk alasannya adalah semata-mata karena alasan kinerja dan penghematan memori, dan juga untuk kemudahan implementasi kompiler (terutama untuk jenis komputer pada saat C ditemukan). Melewati array besar "berdasarkan nilai" tampaknya memiliki dampak besar pada stack, perlu operasi copy array penuh untuk setiap pemanggilan fungsi, dan mungkin kompiler harus lebih pintar untuk menampilkan kode perakitan yang benar (meskipun poin terakhir masih bisa diperdebatkan) . Akan lebih sulit untuk memperlakukan array yang dialokasikan secara dinamis dengan cara yang sama dengan array yang dialokasikan secara statis (dari sudut pandang sintaksis bahasa).
EDIT: setelah membaca beberapa bagian dari link ini , saya pikir alasan sebenarnya (dan alasan mengapa array di structs diperlakukan sebagai jenis nilai, sedangkan array tunggal tidak) adalah kompatibilitas ke C pendahulunya B . Berikut ini kutipan dari Dennis Ritchie:
[...} Solusinya merupakan lompatan penting dalam rantai evolusi antara BCPL tanpa jenis dan mengetik C. Ini menghilangkan materialisasi dari pointer di penyimpanan, dan bukannya menyebabkan penciptaan pointer ketika nama array disebutkan dalam ekspresi. Aturan, yang bertahan dalam C hari ini, adalah bahwa nilai-nilai tipe array dikonversi, ketika mereka muncul dalam ekspresi, menjadi pointer ke yang pertama dari objek yang membentuk array.
Penemuan ini memungkinkan sebagian besar kode B yang ada untuk terus bekerja, meskipun ada perubahan mendasar dalam semantik bahasa. [..]