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
Mary-Kate Olsenasal
2025-01-04 10:03:35393semak imbas

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];

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:
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