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
Libérer: 2025-01-04 10:03:35
original
411 Les gens l'ont consulté

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];
Copier après la connexion

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