如果我有像
这样的结构struct account {
int account_number;
};
那么做
之间的区别是什么myAccount.account_number;
和
myAccount->account_number;
或者没有区别?
如果没有区别,为什么不使用.
符号而不是->
? ->
似乎很混乱。
答案 0 :(得分:38)
- >是(*x).field
的简写,其中x
是指向struct account
类型变量的指针,field
是结构中的字段,例如account_number
如果你有一个指向结构的指针,那么说
accountp->account_number;
比
简洁得多(*accountp).account_number;
答案 1 :(得分:22)
在处理变量时使用.
。在处理指针时使用->
。
例如:
struct account {
int account_number;
};
声明类型为struct account
的新变量:
struct account s;
...
// initializing the variable
s.account_number = 1;
将a
声明为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
使用a->account_number = 1;
是(*a).account_number = 1;
我希望这会有所帮助。
答案 2 :(得分:7)
根据左侧是对象还是指针,使用不同的表示法。
// 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;
答案 3 :(得分:3)
- >是一个指针取消引用和。存取器合并
答案 4 :(得分:3)
如果myAccount
是指针,请使用以下语法:
myAccount->account_number;
如果不是,请改用它:
myAccount.account_number;
答案 5 :(得分:0)
是的,您可以同时使用结构成员 ...
一个与DOt :(“ 。”)
myAccount.account_number;
另一个人是:(“ -> ”)
(&myAccount)->account_number;
答案 6 :(得分:0)
printf("Book title: %s\n", book->subject);
printf("Book code: %d\n", (*book).book_code);