Panjang Tatasusunan dalam Tandatangan Fungsi: Anomali Mengelirukan
Dalam C dan C , tandatangan fungsi selalunya termasuk panjang tatasusunan yang disertakan dalam kurungan segi empat sama, seperti seperti dalam contoh:
int dis(char a[1]) { int length = strlen(a); char c = a[2]; return length; }
Walau bagaimanapun, sintaks ini muncul tidak mempunyai kesan praktikal, seperti yang digambarkan oleh fakta bahawa kod di atas berjaya mengakses elemen melebihi panjang tatasusunan yang diisytiharkan. Ini menimbulkan persoalan: mengapa pengkompil membenarkan tatatanda yang kelihatan berlebihan ini?
Jawapannya terletak pada butiran pelaksanaan pengendalian tatasusunan dalam C dan C . Tatasusunan dalam C dan C ialah 本质上alamat yang menunjuk kepada elemen pertama tatasusunan. Apabila tatasusunan dihantar ke fungsi, alamatnya akan disalin, menghantar penuding dengan berkesan.
Dalam contoh di atas, fungsi dis mengambil tatasusunan aksara a dengan panjang yang diisytiharkan 1. Walau bagaimanapun, sejak tatasusunan diluluskan sebagai penunjuk, spesifikasi panjang tidak relevan dan fungsi boleh mengakses mana-mana elemen tatasusunan, walaupun jika indeks melebihi panjang yang diisytiharkan.
Ini ketidakkonsistenan dalam sintaks parameter telah menjadi subjek perdebatan selama beberapa dekad sejak ia diperkenalkan pada zaman awal bahasa ini. Walaupun sesetengah pihak berpendapat untuk sintaks yang lebih konsisten, yang lain menyebut keserasian dengan kod warisan sebagai alasan untuk mengekalkan tingkah laku semasa.
Walaupun kekeliruan yang boleh ditimbulkan, toleransi tatasusunan dengan panjang yang tidak ditentukan dalam tandatangan fungsi adalah hasil sampingan pelaksanaan tatasusunan berasaskan penunjuk dalam C dan C . Ia berfungsi sebagai peringatan tentang nuansa halus yang boleh timbul daripada interaksi antara ciri bahasa yang berbeza.
Atas ialah kandungan terperinci Mengapakah Tandatangan Fungsi C dan C Membenarkan Panjang Tatasusunan Yang Tiada Kesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!