Rumah >pembangunan bahagian belakang >C++ >Mengapakah Panjang Tatasusunan dalam Tanda Tangan Fungsi C dan C Nampaknya Diabaikan?
Panjang Tatasusunan dalam Tanda Tangan Fungsi: Keingintahuan Sintaksis
Walaupun kehadiran jelas panjang tatasusunan dalam tandatangan fungsi dalam C dan C , panjang ini diabaikan dengan berkesan. Tingkah laku ini telah membingungkan pembangun dan menimbulkan persoalan tentang tujuannya.
Ilusi Kawalan Panjang Tatasusunan
Pertimbangkan coretan kod C berikut:
#include <stdio.h> int dis(char a[1]) { return strlen(a); } int main() { char b[4] = "abc"; int c = dis(b); printf("%d\n", c); return 0; }
Dalam kod ini, fungsi dis menjangkakan tatasusunan aksara dengan panjang 1 ([1]). Walau bagaimanapun, pengguna melepasi tatasusunan dengan panjang 4 (b). Yang menghairankan, kod itu menyusun dan melaksanakan tanpa menimbulkan sebarang ralat. Ini menunjukkan bahawa panjang tatasusunan yang dinyatakan dalam tandatangan fungsi tidak dikuatkuasakan.
Sifat Sebenar Petikan Tatasusunan
Dalam C dan C , tatasusunan tidak diluluskan mengikut nilai . Sebaliknya, penunjuk kepada elemen pertama tatasusunan diluluskan. Oleh itu, spesifikasi panjang tatasusunan dalam tandatangan fungsi menjadi berlebihan, kerana maklumat ini boleh diperolehi daripada penuding.
Rasional Sejarah
Keputusan untuk membenarkan spesifikasi panjang tatasusunan dalam tandatangan fungsi telah dibuat pada zaman awal C, mungkin disebabkan oleh warisan bahasa terdahulu. Walaupun sintaks ini telah dikekalkan atas sebab keserasian, ia telah menjadi punca kekeliruan bagi pembangun.
Kesimpulan
Kehadiran panjang tatasusunan dalam tandatangan fungsi C dan C ialah quirk sintaksis yang sebenarnya tidak menguatkuasakan panjang tatasusunan. Tingkah laku ini disebabkan oleh mekanisme hantaran asas, yang melibatkan penunjuk kepada elemen tatasusunan dan bukannya tatasusunan itu sendiri. Walaupun sintaks ini mungkin kelihatan tidak perlu, asal usul sejarahnya telah mengukuhkan kedudukannya dalam bahasa pengaturcaraan C dan C moden.
Atas ialah kandungan terperinci Mengapakah Panjang Tatasusunan dalam Tanda Tangan Fungsi C dan C Nampaknya Diabaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!