Maison > développement back-end > C++ > le corps du texte

`index[array]` est-il une syntaxe d'accès aux tableaux valide en C et C ?

Susan Sarandon
Libérer: 2024-11-24 21:55:18
original
261 Les gens l'ont consulté

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

Accès aux tableaux par index[array] en C et C

Bien que la forme typique d'indexation de tableau soit array[index], C et C fournissent une syntaxe alternative : index[tableau]. Cette syntaxe a intrigué de nombreux programmeurs, mais est-elle valide par les spécifications du langage ?

Question :

int arr[] = {1, 2, 3};
2[arr] = 5; // Does this compile?
assert(arr[2] == 5); // Does this assertion fail?
Copier après la connexion

Explication :

Cette question piège repose sur la nature commutative de ajout. L'opération index[array] est convertie en *(index array), et comme l'addition est commutative, on pourrait supposer que 2[arr] et arr[2] sont équivalents. Cependant, cela n'est pas explicitement indiqué dans les spécifications linguistiques.

Réponse :

Oui, le code est valide selon les spécifications C et C.

C99 (6.5.2.1, paragraphe 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".
Copier après la connexion

C99 (6.5.2.1, paragraphe 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).
Copier après la connexion

Ces spécifications n'exigent pas que l'ordre des arguments de [] soit sain d'esprit. Par conséquent, les deux lignes du code se compilent et s'exécutent comme prévu, et l'assertion réussit.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal