Rumah > pembangunan bahagian belakang > C++ > Adakah `2[arr]` Sama dengan `arr[2]` dalam C dan C : A Commutative Array Access?

Adakah `2[arr]` Sama dengan `arr[2]` dalam C dan C : A Commutative Array Access?

Susan Sarandon
Lepaskan: 2024-11-25 14:42:11
asal
860 orang telah melayarinya

Does `2[arr]` Equal `arr[2]` in C and C  : A Commutative Array Access?

Mengakses Tatasusunan mengikut Indeks [Array] dalam C dan C : Rasa Ingin Tahu Komutatif

Soalan penuh teka-teki yang membingungkan penemuduga bertanya:

int arr[] = {1, 2, 3};
2[arr] = 5; // Compiles?
assert(arr[2] == 5); // Fails?
Salin selepas log masuk

Gerakan menunjukkan bahawa a[b] diterjemahkan kepada *(a b) dan, memandangkan penambahan adalah komutatif, 2[arr] sepatutnya bersamaan dengan *(2 arr).

Adakah Standard Menyokong Ini?

Memang, C dan Piawaian C menyokong tingkah laku ini.

Piawaian C (C99):

Seksyen 6.5.2.1, perenggan 1:

Salah satu ungkapan hendaklah mempunyai jenis "penunjuk kepada jenis objek", ungkapan lain hendaklah mempunyai jenis integer, dan hasilnya mempunyai jenis "jenis".

Perenggan 2 (penekanan ditambah):

A postfix ungkapan diikuti dengan ungkapan dalam kurungan segi empat sama [] ialah sebutan subskrip bagi elemen objek tatasusunan. Takrif operator subskrip [] ialah E1[E2] adalah sama dengan (*((E1) (E2))). Oleh kerana peraturan penukaran yang digunakan pada pengendali binari, jika E1 ialah objek tatasusunan (setara, penunjuk kepada elemen awal objek tatasusunan) dan E2 ialah integer, E1[E2] menetapkan elemen E2-ke-E1 (mengira dari sifar).

Kesimpulan

Piawaian dengan tegas menyatakan bahawa E1[E2] bersamaan dengan *(E1 E2), tanpa mengira susunan hujah. Oleh itu, 2[arr] menghasilkan hasil yang sama seperti arr[2], membolehkan kedua-dua tugasan dan penegasan berjaya tanpa menaikkan kening.

Atas ialah kandungan terperinci Adakah `2[arr]` Sama dengan `arr[2]` dalam C dan C : A Commutative Array Access?. 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