Le fait de prendre l'adresse d'un élément de tableau un après la fin est-il autorisé par la norme C ?
L'extrait de code ci-dessous a suscité des discussions sur sa validité selon la norme C :
int array[5]; int *array_begin = &array[0]; int *array_end = &array[5];
Plus précisément, &array[5] est-il une expression C légale dans ce contexte ?
Légalité selon la norme C
La norme C définit la légalité de cette expression :
Interprétation
En appliquant ces règles à &array[5], nous avons :
&array[5] = &*(array + 5) = (array + 5)
Puisque (tableau 5) pointe après la fin du tableau et n'est pas déréférencé, c'est une expression légale selon le Standard C.
Comparaison avec le Standard C
Ce comportement est également conforme au Standard C, qui permet de prendre l'adresse des éléments au-delà de la fin d'un tableau, encore une fois à condition qu'ils ne soient pas déréférencés.
Raison de la différence Traitement
La décision de traiter différemment le tableau 5 et le &array[4] 1 est enracinée dans les objectifs différents de ces expressions :
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!