如果我有一个类似的结构
struct account {
int account_number;
};
Run Code Online (Sandbox Code Playgroud)
然后做什么有什么区别
myAccount.account_number;
Run Code Online (Sandbox Code Playgroud)
和
myAccount->account_number;
Run Code Online (Sandbox Code Playgroud)
或者没有区别?
如果没有区别,你为什么不用这个.
符号而不是->
?->
看起来很乱.
rmk*_*rmk 40
- >是一个简写(*x).field
,其中x
是指向类型变量的指针struct account
,并且field
是结构中的一个字段,例如account_number
.
如果你有一个指向结构的指针,那么说
accountp->account_number;
Run Code Online (Sandbox Code Playgroud)
比...简洁得多
(*accountp).account_number;
Run Code Online (Sandbox Code Playgroud)
bac*_*hus 22
您可以使用.
,当你处理变量.您可以使用->
,当你正在处理的指针.
例如:
struct account {
int account_number;
};
Run Code Online (Sandbox Code Playgroud)
声明一个类型的新变量struct account
:
struct account s;
...
// initializing the variable
s.account_number = 1;
Run Code Online (Sandbox Code Playgroud)
声明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
Run Code Online (Sandbox Code Playgroud)
使用a->account_number = 1;
是一种替代语法(*a).account_number = 1;
我希望这有帮助.
根据左侧是对象还是指针,使用不同的表示法.
// 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;
Run Code Online (Sandbox Code Playgroud)