Digamos que eu tenha uma estrutura
struct s
{
int a;
}
e uma função principal como esta
int main()
{
struct s s1 = {.a = 10};
struct s *sptr = &s1;
sptr->a--;
printf("%d\n", sptr->a);
s1.a = 10;
--sptr->a;
printf("%d\n", sptr->a);
return 0;
}
Saída :
9
9
De acordo com a precedência do operador, ->
eles --
têm a mesma precedência e associatividade esquerda->direita.
No caso de sptr->a--
, posso entender sptr->a
que foi feito primeiro e depois --
aplicado.
Mas no caso de --sptr->a
, --
deve ser aplicado a sptr
primeiro. Isso pode levar a um comportamento indefinido, mas deve ser o caso. Por que isso ainda funciona da mesma forma que sptr->a--
?