Разница между → и. в структуре?
Если у меня есть структура вроде
struct account {
int account_number;
};
Тогда какая разница между выполнением
myAccount.account_number;
и
myAccount->account_number;
или нет разницы?
Если нет никакой разницы, почему бы вам просто использовать нотацию .
, а не ->
? ->
кажется настолько запутанным.
Ответы
Ответ 1
- > является сокращением для (*x).field
, где x
является указателем на переменную типа struct account
, а field
является полем в структуре, например account_number
.
Если у вас есть указатель на структуру, а затем
accountp->account_number;
гораздо более кратким, чем
(*accountp).account_number;
Ответ 2
Вы используете .
, когда имеете дело с переменными. Вы используете ->
, когда имеете дело с указателями.
Например:
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;
Надеюсь, это поможет.
Ответ 3
Вы используете разные обозначения в зависимости от того, является ли левая сторона объектом или указателем.
// 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
- > является разыменованием указателя и. аксессор вместе
Ответ 5
Если myAccount
является указателем, используйте этот синтаксис:
myAccount->account_number;
Если это не так, используйте вместо этого:
myAccount.account_number;
Ответ 6
да, вы можете использовать struct membrs обоими способами...
один с DOt :( " . ")
myAccount.account_number;
другой :( " -> ")
(&myAccount)->account_number;
Ответ 7
printf("Book title: %s\n", book->subject);
printf("Book code: %d\n", (*book).book_code);