Si l'expression type name[count]est écrite dans une fonction, vous dites au compilateur C d'allouer sur les sizeof(type)*countoctets de trame de pile et de calculer l'adresse du premier élément du tableau.
Si l'expression type name[count]est écrite en dehors de toutes les définitions de fonctions et de structures, vous dites au compilateur C d'allouer sur les sizeof(type)*countoctets de segment de données et de calculer l'adresse du premier élément du tableau.
nameest en fait un objet constant qui stocke l'adresse du premier élément du tableau et chaque objet qui stocke une adresse de mémoire est appelé pointeur, c'est donc la raison pour laquelle vous traitez namecomme un pointeur plutôt qu'un tableau. Notez que les tableaux en C ne sont accessibles que via des pointeurs.
Si countest une expression constante qui évalue à zéro, vous dites au compilateur C d'allouer zéro octet sur la trame de pile ou le segment de données et de renvoyer l'adresse du premier élément du tableau, mais le problème en faisant cela est que le premier élément de tableau de longueur nulle n'existe pas et vous ne pouvez pas calculer l'adresse de quelque chose qui n'existe pas.
C'est rationnel que l'élément non. count+1n'existe pas dans un counttableau de longueur, c'est pourquoi le compilateur C interdit de définir un tableau de longueur nulle comme variable dans et en dehors d'une fonction, car quel est le contenu de namealors? Quelle adresse namestocke exactement?
Si pest un pointeur, l'expression p[n]est équivalente à*(p + n)
Lorsque l'astérisque * dans l'expression de droite est une opération de déréférencement du pointeur, ce qui signifie accéder à la mémoire pointée par p + nou accéder à la mémoire dont l'adresse est stockée p + n, où p + nest l'expression du pointeur, il prend l'adresse de pet ajoute à cette adresse le nombre nmultiplier le taille du type du pointeur p.
Est-il possible d'ajouter une adresse et un numéro?
Oui, c'est possible, car l'adresse est un entier non signé généralement représenté en notation hexadécimale.