Adakah `index[array]` Sintaks Akses Tatasusunan yang Sah dalam C dan C ?

Susan Sarandon
Lepaskan: 2024-11-24 21:55:18
asal
261 orang telah melayarinya

Is `index[array]` a Valid Array Access Syntax in C and C  ?

Mengakses Tatasusunan mengikut Indeks[array] dalam C dan C

Walaupun bentuk biasa pengindeksan tatasusunan ialah tatasusunan[indeks], C dan C menyediakan sintaks alternatif: indeks[array]. Sintaks ini telah membingungkan ramai pengaturcara, tetapi adakah ia sah mengikut spesifikasi bahasa?

Soalan:

int arr[] = {1, 2, 3};
2[arr] = 5; // Does this compile?
assert(arr[2] == 5); // Does this assertion fail?
Salin selepas log masuk

Penjelasan:

Soalan helah ini bergantung pada sifat komutatif bagi tambahan. Indeks operasi[array] ditukar kepada *(array indeks), dan memandangkan penambahan adalah komutatif, kita mungkin menganggap bahawa 2[arr] dan arr[2] adalah bersamaan. Walau bagaimanapun, ini tidak dinyatakan secara eksplisit dalam spesifikasi bahasa.

Jawapan:

Ya, kod itu sah mengikut spesifikasi C dan C.

C99 (6.5.2.1, perenggan 1):

One of the expressions shall have type "pointer to object type", the other expression shall have integer type, and the result has type "type".
Salin selepas log masuk

C99 (6.5.2.1, perenggan 2):

A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).
Salin selepas log masuk

Spesifikasi ini tidak memerlukan susunan hujah untuk [] menjadi waras. Oleh itu, kedua-dua baris dalam kod menyusun dan melaksanakan seperti yang dijangkakan, dan penegasan berlalu.

Atas ialah kandungan terperinci Adakah `index[array]` Sintaks Akses Tatasusunan yang Sah dalam C dan C ?. 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