Maison > développement back-end > C++ > Est-ce que `2[arr]` fonctionne en C et C ?

Est-ce que `2[arr]` fonctionne en C et C ?

DDD
Libérer: 2024-11-26 06:43:09
original
527 Les gens l'ont consulté

Does `2[arr]` Work in C and C  ?

Accès aux tableaux à l'aide d'Index[array] en C et C

Considérez l'extrait de code suivant :

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

Certains enquêteurs pourraient se demander pourquoi cet extrait de code est compilé et exécuté sans erreurs.

Comprendre le code

L'expression 2[arr] est équivalente à *(2 arr). Puisque l'addition est commutative dans C et C , l'ordre des arguments de [] n'a pas d'importance. Par conséquent, 2[arr] accède efficacement au troisième élément du tableau arr.

Est-ce garanti par la spécification du langage ?

Oui. Les normes C et C énoncent explicitement ce comportement :

  • Norme C99 : Le paragraphe 6.5.2.1 indique que E1[E2] est équivalent à *((E1) (E2)) .
  • Norme C 11 : Le paragraphe 5.2.1.2 indique que "E1[E2] est équivalent à "(*(E1) (E2))"

Par conséquent, l'accès aux tableaux à l'aide de index[array] est garanti par la spécification du langage, même si cela semble inhabituel ou contre-intuitif.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal