Comment accéder aux tableaux de structures à l’aide de l’arithmétique de pointeur?
supposons que j’ai une structure
struct point{ int x; int y; }collection[100];
Supposons que j’ai une fonction
int func(struct point *collection,int size)
Dans cette fonction, j’accède à l’élément comme indiqué ci-dessous.
collection[0].x
Est-ce la même chose que *(collection + 0).x
? Depuis le .
L’opérateur a une priorité plus élevée que l’opérateur *
, d’abord le pointeur de la collection est incrémenté de 0, puis l’opérateur Point est appliqué, puis le pointeur déréférencé? D’une certaine manière, cela n’a pas de sens; toute clarification est appréciée.
Est-ce la même chose que
*(collection + 0).x
?
Votre explication est absolument correcte, a une priorité supérieure à *
, de sorte que la deuxième expression est analysée comme *((collection + 0).x)
. collection[i].x
, par contre, est équivalent à (*(collection + i)).x
.
En fait, cette maladresse est la raison pour laquelle l’opérateur ->
été introduit. Par conséquent, en supposant que y
soit une expression non sortingviale, vous pouvez écrire
y->x
au lieu de
(*(y)).x
Bien que, évidemment, collection[0].x
soit bien plus propre que (collection + 0)->x
dans ce cas particulier.