Подтвердить что ты не робот

Разница между → и. в структуре?

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

struct account {
   int account_number;
};

Тогда какая разница между выполнением

myAccount.account_number;

и

myAccount->account_number;

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

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

4b9b3361

Ответ 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);