- >之间的差异和。在一个结构?

时间:2011-05-13 23:05:20

标签: c struct

如果我有像

这样的结构
struct account {
   int account_number;
};

那么做

之间的区别是什么
myAccount.account_number;

myAccount->account_number;

或者没有区别?

如果没有区别,为什么不使用.符号而不是->->似乎很混乱。

7 个答案:

答案 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);