Rumah >pembangunan bahagian belakang >C++ >Mengapakah Panjang Tatasusunan dalam Tanda Tangan Fungsi C dan C Nampaknya Diabaikan?

Mengapakah Panjang Tatasusunan dalam Tanda Tangan Fungsi C dan C Nampaknya Diabaikan?

Linda Hamilton
Linda Hamiltonasal
2024-12-15 06:07:13755semak imbas

Why Do Array Lengths in C and C   Function Signatures Seem to Be Ignored?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn