Разница между -> и.в структуре? - PullRequest
21 голосов
/ 14 мая 2011

Если у меня есть структура, подобная

struct account {
   int account_number;
};

Тогда в чем разница между

myAccount.account_number;

и

myAccount->account_number;

или нет разницы?

Если нет разницы, почему бы вам просто не использовать нотацию . вместо ->? -> кажется таким грязным.

Ответы [ 6 ]

38 голосов
/ 14 мая 2011

-> является сокращением для (*x).field, где x - указатель на переменную типа struct account, а field - это поле в структуре, например account_number.

Если у вас есть указатель на структуру, то произнесите

accountp->account_number;

гораздо лаконичнее

(*accountp).account_number;
22 голосов
/ 14 мая 2011

Вы используете ., когда имеете дело с переменными.Вы используете ->, когда имеете дело с указателями.

Например:

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;

Надеюсь, это поможет.

7 голосов
/ 14 мая 2011

Вы используете разные обозначения в зависимости от того, является ли левая сторона объектом или указателем.

// 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 голосов
/ 14 мая 2011

Если myAccount является указателем, используйте этот синтаксис:

myAccount->account_number;

Если это не так, используйте вместо этого:

myAccount.account_number;
3 голосов
/ 14 мая 2011

-> разыменование указателя и. Аксессуар комбинированный

0 голосов
/ 14 июля 2018

да, вы можете использовать struct membrs в обоих направлениях ...

один с DOt :( ". ")

myAccount.account_number;

еще один :( " -> ")

(&myAccount)->account_number;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...