Si l'expression type name[count]
est écrite dans une fonction, vous dites au compilateur C d'allouer sur les sizeof(type)*count
octets 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)*count
octets de segment de données et de calculer l'adresse du premier élément du tableau.
name
est 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 name
comme un pointeur plutôt qu'un tableau. Notez que les tableaux en C ne sont accessibles que via des pointeurs.
Si count
est 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+1
n'existe pas dans un count
tableau 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 name
alors? Quelle adresse name
stocke exactement?
Si p
est 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 + n
ou accéder à la mémoire dont l'adresse est stockée p + n
, où p + n
est l'expression du pointeur, il prend l'adresse de p
et ajoute à cette adresse le nombre n
multiplier 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.