Différence entre -> et. dans une structure?

Si j’ai une structure comme

struct account { int account_number; }; 

Alors quelle est la différence entre faire

 myAccount.account_number; 

et

 myAccount->account_number; 

ou n’y a-t-il pas une différence?

S’il n’y a pas de différence, pourquoi ne pas simplement utiliser le . notation plutôt que -> ? -> semble tellement en désordre.

-> est un raccourci pour (*x).field , où x est un pointeur sur une variable de type struct account , et field est un champ de la structure, tel que account_number .

Si vous avez un pointeur sur une structure, alors dites

 accountp->account_number; 

est beaucoup plus concis que

 (*accountp).account_number; 

Vous utilisez . quand vous avez affaire à des variables. Vous utilisez -> lorsque vous traitez avec des pointeurs.

Par exemple:

 struct account { int account_number; }; 

Déclarez une nouvelle variable de type struct account :

 struct account s; ... // initializing the variable s.account_number = 1; 

Déclarez a tant que pointeur sur un struct account :

 struct account *a; ... // initializing the variable a = &some_account; // point the pointer to some_account a->account_number = 1; // modifying the value of account_number 

Utilisation de a->account_number = 1; est une syntaxe alternative pour (*a).account_number = 1;

J’espère que ça aide.

Vous utilisez la notation différente selon que le côté gauche est un object ou un pointeur.

 // correct: struct account myAccount; myAccount.account_number; // also correct: struct account* pMyAccount; pMyAccount->account_number; // also, also correct (*pMyAccount).account_number; // incorrect: myAccount->account_number; pMyAccount.account_number; 

-> est un pointeur dereference et. accesseur combiné

Si myAccount est un pointeur, utilisez cette syntaxe:

 myAccount->account_number; 

Si ce n’est pas le cas, utilisez celui-ci à la place:

 myAccount.account_number; 

oui, vous pouvez utiliser les deux types de structure

on est avec DOt 🙁 ” . “)

 myAccount.account_number; 

une autre personne est 🙁 “” “”)

 (&myAccount)->account_number;