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

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

DDD
Libérer: 2024-11-26 06:43:09
original
427 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!

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