Maison >développement back-end >C++ >`&array[5]` est-il un pointeur valide en C au-delà des limites du tableau ?

`&array[5]` est-il un pointeur valide en C au-delà des limites du tableau ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-04 10:03:35439parcourir

Is `&array[5]` a Valid Pointer in C   Beyond Array Bounds?

L'abonnement aux tableaux peut-il pointer au-delà des limites du tableau ?

La question se pose de savoir si le code suivant est conforme à la norme C :

int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];

Plus précisément, la validité de &array[5] dans ce contexte est sous examen minutieux.

Norme C

Selon le projet de norme C99 :

  • §6.5.2.1, paragraphe 2 : "E1[E2] est identique à (*((E1) (E2)))"
  • §6.5.3.2, paragraphe 3 (souligné) : "Si l'opérande est le résultat d'un opérateur [], ni l'opérateur & ni l'unaire * qui est impliqué par le [] est évalué et le résultat est comme si l'opérateur & avait été supprimé et que l'opérateur [] avait été remplacé par un opérateur."
  • §6.5.6, paragraphe 8 : "Si l'expression P pointe un après le dernier élément d'un objet tableau, l'expression (P) 1 pointe un après le dernier élément de l'objet tableau, et si l'expression Q pointe un après le dernier élément d'un objet tableau, l'expression (Q) - 1 pointe vers le dernier élément du tableau objet."

Conclusion

Ces dispositions indiquent que :

  • Les pointeurs peuvent légitimement pointer un élément au-delà de la fin d'un array (sans être déréférencé).
  • &array[5] est équivalent à &*(array 5), qui à son tour est équivalent à (array 5).
  • (array 5) pointe un après la fin du tableau.
  • Puisque &array[5] n'entraîne pas de déréférencement, il est légal selon la norme C .

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