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 la 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 .
lorsque vous traitez avec 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
en tant que pointeur sur 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
Utiliser 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 objet 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 struct membrs les deux manières ...
on est avec DOt :( ". ")
myAccount.account_number;
une autre personne est :( " -> ")
(&myAccount)->account_number;