Dalam C , bolehkah alamat elemen tatasusunan satu masa yang lepas dari penghujungnya diperoleh melalui langganan, seperti yang ditunjukkan dalam kod berikut coretan?
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
Secara khusus, adakah &array[5] mematuhi Piawaian C?
Ya, kod itu mematuhi Piawaian C.
Mengikut draf C99 standard:
§6.5.2.1, perenggan 2:
Ungkapan postfix diikuti dengan ungkapan dalam kurungan segi empat sama [] ialah sebutan subskrip bagi elemen tatasusunan objek.
§6.5.3.2, perenggan 3:
Jika operan [bagi & operator] ialah hasil daripada operator [], baik & operator mahupun unary * yang tersirat oleh [] tidak dinilai dan hasilnya adalah seolah-olah operator & telah dialih keluar dan operator [] ditukar kepada operator.
§6.5.6, perenggan 8:
Jika ungkapan P menunjuk ke elemen terakhir objek tatasusunan, ungkapan (P) 1 menunjukkan satu melepasi elemen terakhir objek tatasusunan.
Berdasarkan petikan ini:
Oleh itu, ungkapan &array[5] adalah bersamaan dengan *(array 5), yang menunjukkan satu melepasi elemen tatasusunan terakhir. Ini adalah sah mengikut Piawaian, selagi penunjuk tidak dinyahrujuk.
Atas ialah kandungan terperinci Adakah Mendapatkan Alamat Selepas Penghujung Tatasusunan C melalui Langganan Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!