Rumah > pembangunan bahagian belakang > C++ > Adakah Mendapatkan Alamat Selepas Penghujung Tatasusunan C melalui Langganan Sah?

Adakah Mendapatkan Alamat Selepas Penghujung Tatasusunan C melalui Langganan Sah?

Patricia Arquette
Lepaskan: 2024-12-20 11:07:10
asal
991 orang telah melayarinya

Is Obtaining the Address One Past the End of a C   Array via Subscripting Legal?

Menyiasat Kesahihan Pemerolehan Alamat Tatasusunan Satu-Akhir

Soalannya

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];
Salin selepas log masuk

Secara khusus, adakah &array[5] mematuhi Piawaian C?

Jawapannya

Ya, kod itu mematuhi Piawaian C.

Penjelasan

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:

  • Pengendali & menghasilkan alamat penuding operan.
  • Apabila digunakan pada hasil pengendali [], operator & boleh dialih keluar dan operator [] menjadi operator.
  • Ungkapan yang menunjuk kepada elemen terakhir tatasusunan boleh secara sah menunjuk satu melepasi hujung tatasusunan.

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!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan