首页 > 解决方案 > 结构中指向另一个结构的指针

问题描述

想象两个结构定义为:

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,临时是块列表,还是只是列表的第一个块?

这些问题听起来可能很愚蠢,但过去两个小时我一直在阅读有关结构的文章,似乎无法解决这个问题。如果有人能澄清一下,我将不胜感激。

标签: c

解决方案


你不能做任何你写的事情,因为它只是结构的声明,而不是你正在处理的真实对象。但是,如果您创建一些,您可以执行所有您想要的操作。

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循环中即可。


推荐阅读