Difference between -> and . in a struct?

梦想与她 提交于 2019-12-31 09:00:08

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!