Представьте себе две структуры, определенные как:
struct list
{
struct block *first;
struct block *last;
};
struct block
{
uint8_t *address;
uint32_t alloc_count;
struct block *prev;
struct block *next;
};
Если я сделаю list->first->address, это сработает? Так как list->first указывает на блочную структуру, которая имеет адресное значение. Как насчет list->first->next (поскольку это также указывает на блочную структуру?). А что, если я сделаю block->first, я предполагаю, что это не сработает, так как first определен в структуре списка?
Если я определяю новую структуру и объявляю ее так: struct block *temporary = list->first, будет ли временный список блоков или только первый блок списка?
Эти вопросы могут показаться глупыми, но я читал о структурах последние два часа и, кажется, не могу обойти это. Если кто-то может пояснить, буду признателен.
1 ответ
Вы ничего не можете сделать из того, что написали, потому что это просто объявление структур, а не реальных объектов, с которыми вы имеете дело. Но если вы создадите их, вы сможете выполнять все действия, которые захотите.
struct list new_list;
struct block new_block;
uint8_t address = new_list->first->address; // OK
struct block target_block = new_list->first->next; // OK
Конечно, вы не можете использовать new_block->first
, потому что в вашей структуре блока нет поля first
.
struct block *temporary = list->first
будет не списком блоков и не первым блоком списка, это будет указатель на первый блок списка. Но вы можете легко получить доступ ко всему списку через first->next
, first->next->next
и т. д. Просто поместите i = i->next
в свой цикл for
.
list
. Есть только тип struct list
. С++ делает по-другому
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.
uint8_t *address;
uint32_t alloc_count;
?