问题
If I have a struct like
struct account {
int account_number;
};
Then what's the difference between doing
myAccount.account_number;
and
myAccount->account_number;
or isn't there a difference?
If there's no difference, why wouldn't you just use the . notation rather than ->? -> seems so messy.
回答1:
-> is a shorthand for (*x).field, where x is a pointer to a variable of type struct account, and field is a field in the struct, such as account_number.
If you have a pointer to a struct, then saying
accountp->account_number;
is much more concise than
(*accountp).account_number;
回答2:
You use . when you're dealing with variables. You use -> when you are dealing with pointers.
For example:
struct account {
int account_number;
};
Declare a new variable of type struct account:
struct account s;
...
// initializing the variable
s.account_number = 1;
Declare a as a pointer to 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
Using a->account_number = 1; is an alternate syntax for (*a).account_number = 1;
I hope this helps.
回答3:
You use the different notation according to whether the left-hand side is a object or a pointer.
// 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;
回答4:
-> is a pointer dereference and . accessor combined
回答5:
If myAccount is a pointer, use this syntax:
myAccount->account_number;
If it's not, use this one instead:
myAccount.account_number;
回答6:
yes you can use struct membrs both the ways...
one is with DOt:(" . ")
myAccount.account_number;
anotherone is:(" -> ")
(&myAccount)->account_number;
回答7:
printf("Book title: %s\n", book->subject);
printf("Book code: %d\n", (*book).book_code);
来源:https://stackoverflow.com/questions/5998599/difference-between-and-in-a-struct