операторы & и *, делающие мой fread () успешным в C - PullRequest
0 голосов
/ 16 мая 2018

Хорошо, поэтому, когда я использую этот блок кода

fread(&(*list) -> books, sizeof(struct NOVEL), 1, fpread);

Все отлично работает.

Однако, когда я использую это

fread (list -> books, sizeof(struct NOVEL), 1, fpread);

Я получаю эту ошибку: Базовый тип ссылки на элемент 'LISTNODEPTR' (он же 'struct listnode *') не является структурой или объединением.

Я думал, что это * и & уничтожить друг друга, так почему же это происходит? Заранее спасибо.

1 Ответ

0 голосов
/ 16 мая 2018
*list 

- это указатель на структуру,

list 

- указатель на указатель структуры.

Итак, для доступа к полю книг вам нужно: (* список) -> книги

Вы должны определить свой приоритет прямо: http://en.cppreference.com/w/c/language/operator_precedence

&(*list) -> books 

совпадает с

&((*list) -> books)

Это не то же самое, что

list -> books
...