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
841 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!

sumber:php.cn
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