Adakah Mengambil Alamat Elemen Tatasusunan Satu Melepasi Tamat Dibenarkan oleh Piawaian C?
Coretan kod di bawah telah membangkitkan perbincangan tentang kesahihannya mengikut Piawaian C:
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
Secara khusus, adalah &array[5] ungkapan C undang-undang dalam konteks ini?
Legaliti Mengikut Piawaian C
C Standard mentakrifkan kesahihan ungkapan ini:
Tafsiran
Dengan menggunakan peraturan ini pada &array[5], kami mempunyai:
&array[5] = &*(array + 5) = (array + 5)
Memandangkan (tatasusunan 5) menunjuk satu melepasi hujung tatasusunan dan tidak dinyahrujuk, ia adalah ungkapan undang-undang mengikut Piawaian C.
Perbandingan dengan Piawaian C
Tingkah laku ini juga konsisten dengan Piawaian C, yang membenarkan pengambilan alamat elemen di luar penghujung tatasusunan, sekali lagi dengan syarat ia tidak dinyahrujuk.
Sebab Rawatan Berbeza
Keputusan untuk merawat tatasusunan 5 dan &tatasusunan[4] 1 berbeza berakar umbi dalam tujuan berbeza ungkapan ini:
Atas ialah kandungan terperinci Adakah Mengambil Alamat Satu Melepasi Penghujung Array C Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!