Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah `index[array]` Sintaks Akses Tatasusunan yang Sah dalam C dan C ?

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

Susan Sarandon
Susan Sarandonasal
2024-11-24 21:55:18270semak imbas

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?

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".

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).

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!

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