Maison >développement back-end >C++ >&array[5] est-il une expression C valide pour accéder à l'élément de tableau One-Past-the-End ?

&array[5] est-il une expression C valide pour accéder à l'élément de tableau One-Past-the-End ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-27 00:44:11568parcourir

Is &array[5] a Valid C   Expression for Accessing the One-Past-the-End Array Element?

Accès aux éléments de tableau One-Past-the-End avec &array[5]

Question :

&array[5] est-il considéré comme une expression de code C valide qui fait référence à l'élément juste après la fin d'un array ?

Réponse :

Oui, &array[5] est considéré comme du code C légal selon la norme C.

Explication détaillée :

C99 Norme :

  • 6.5.2.1, paragraphe 2 : Définit l'opérateur d'indice [] comme équivalent à (((E1) (E2) )), où E1 est un objet tableau et E2 est un entier.
  • 6.5.3.2, paragraphe 3 : Indique que si l'opérande de l'opérateur & est le résultat d'un opérateur [], l'opérateur & et l'unaire implicite * ne sont pas évalués , ce qui entraîne la suppression de l'opérateur & et le remplacement de l'opérateur [] par un opérateur.

C Standard :

  • 6.5.6, paragraphe 8 : Permet aux pointeurs de pointer un après le dernier élément d'un tableau à condition qu'ils ne soient pas déréférencés.

Sur la base de ces normes, l'expression &array[5] est évaluée comme suit :

  • &(&array[5]) = &(matrice 5)
  • &*(matrice 5) = matrice 5

Puisque le tableau 5 pointe après la fin du tableau et n'est pas déréférencé, &array[5] est un valide expression.

Comparaison avec la norme C :

La norme C correspond à la norme C à cet égard.

Raison de la traiter différemment du tableau 5 ou &array[4] 1 :

La principale différence entre &array[5] et des expressions comme array 5 ou &array[4] 1 sont leur utilisation prévue. Alors que le tableau 5 et &array[4] 1 effectuent explicitement une arithmétique de pointeur pour obtenir un pointeur décalé par rapport au début du tableau, &array[5] utilise l'opérateur [] pour accéder directement à l'élément à ce décalage. Cette distinction permet aux programmeurs de référencer plus facilement la fin du tableau sans avoir à effectuer une arithmétique de pointeur explicite.

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:
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