Répondre

11

Exactement. *p et p[0] sont les mêmes. Voici quelques fonctionnalités soignées vous voulez savoir:

  • « notation pointeur » se réfère généralement à l'aide de la « déréférencement » (ou « indirection ») opérateur
  • « notation Array » se réfère généralement à l'aide des supports et offset valeur

Vous pouvez représenter une adresse en mémoire en utilisant soit interchangeable:

  • *p est équivalent à p[0]
  • *(p+1) est équivalent à p[1], et plus impressionante également équivalent à 1[p]

NOTE:

  • Comme indiqué dans une autre réponse, la forme générale est que *(p+i) est équivalent à p[i]
  • En outre, s'il vous plaît ne pas utiliser i[p]
+1

Je ne pense pas que la syntaxe qui autorise '1 [p]' soit géniale. Je pense que la langue est assez confuse pour les débutants que nous n'avons pas besoin de souligner les coins sombres de la langue (ils seront trouvés comme la personne va mieux). –

+0

Je suis d'accord avec vous sur la confusion du langage, mais la raison pour laquelle je considère ce point particulier comme «génial» est qu'il nous donne implicitement des informations intrigantes sur les spécifications de la langue. Je pense que comprendre que la notation de tableau est simplement l'arithmétique de pointeur est négligé. Si l'on connaît l'arithmétique du pointeur (la propriété commutative est vérifiée), on se rend compte que la syntaxe permet d'utiliser 'i [p]'. Alors on peut se rendre compte que ces deux "notations" sont en quelque sorte les mêmes pour le compilateur - c'est génial! –

+1

+1 pour une réponse de plus d'une phrase. -1,9 pour mentionner l'abomination '1 [p]'. net 0 (j'ai arrondi vers le haut). –

7

Correct - *p est équivalent à p[0].

7

p contient l'adresse du premier O du tableau.

L'indexation est comme ceci:

p[i] = *(p+i); //note the pointer arithmetic 
0

* p pointe vers le premier élément p [0].