


Adakah `&array[5]` Penunjuk yang Sah dalam C Melangkaui Had Array?
Jan 04, 2025 am 10:03 AMBolehkah Titik Langganan Tatasusunan Melampaui Sempadan Tatasusunan?
Timbul persoalan sama ada kod berikut mematuhi Piawaian C:
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
Secara khusus, kesahihan &array[5] dalam konteks ini adalah di bawah penelitian.
C Standard
Mengikut piawaian draf C99:
- §6.5.2.1, Perenggan 2: "E1[E2] adalah sama dengan (*((E1)) (E2)))"
- §6.5.3.2, Perenggan 3 (Ditekankan): "Jika operan adalah hasil daripada pengendali [], baik operator & mahupun unary * yang tersirat oleh [] dinilai dan hasilnya seolah-olah operator & telah dialih keluar dan operator [] ditukar kepada operator."
- §6.5.6, Perenggan 8: "Jika ungkapan P menunjuk satu melepasi elemen terakhir objek tatasusunan, ungkapan (P) 1 menunjukkan satu melepasi yang terakhir elemen objek tatasusunan, dan jika ungkapan Q menunjuk satu melepasi elemen terakhir objek tatasusunan, ungkapan (Q) - 1 menunjuk kepada elemen terakhir tatasusunan objek."
Kesimpulan
Peruntukan ini menunjukkan bahawa:
- Penunjuk boleh secara sah menunjuk satu elemen melepasi penghujung sesuatu tatasusunan (tanpa dinyahrujuk).
- &array[5] bersamaan dengan &*(array 5), yang seterusnya bersamaan dengan (tatasusunan 5).
- (tatasusunan 5) menunjuk satu melepasi hujung tatasusunan.
- Memandangkan &tatasusunan[5] tidak mengakibatkan penyahrujukan , ia sah mengikut Piawaian C.
Atas ialah kandungan terperinci Adakah `&array[5]` Penunjuk yang Sah dalam C Melangkaui Had Array?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Langkah Format Fungsi Fungsi C Langkah Penukaran Kes

Apakah jenis nilai yang dikembalikan oleh fungsi bahasa C? Apa yang menentukan nilai pulangan?

Gulc: Perpustakaan C dibina dari awal

Apakah definisi dan peraturan panggilan fungsi bahasa C dan apakah itu

Bagaimana Perpustakaan Templat St Standard (STL) berfungsi?

Penggunaan dan perkongsian frasa yang berbeza

Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan?

Bagaimanakah saya menggunakan algoritma dari STL (jenis, mencari, mengubah, dll) dengan cekap?
