Rumah > pembangunan bahagian belakang > C++ > Adakah `&array[5]` Penunjuk yang Sah dalam C Melangkaui Had Array?

Adakah `&array[5]` Penunjuk yang Sah dalam C Melangkaui Had Array?

Mary-Kate Olsen
Lepaskan: 2025-01-04 10:03:35
asal
411 orang telah melayarinya

Is `&array[5]` a Valid Pointer in C   Beyond Array Bounds?

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

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!

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