c - 结构中指向另一个结构的指针
问题描述
想象两个结构定义为:
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,临时是块列表,还是只是列表的第一个块?
这些问题听起来可能很愚蠢,但过去两个小时我一直在阅读有关结构的文章,似乎无法解决这个问题。如果有人能澄清一下,我将不胜感激。
解决方案
你不能做任何你写的事情,因为它只是结构的声明,而不是你正在处理的真实对象。但是,如果您创建一些,您可以执行所有您想要的操作。
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
循环中即可。
推荐阅读
- python - 每 x 秒加载 dict 然后传递给 df 并清除 dict
- php - 如果在 DB 中找不到数据,用 php 发送什么错误代码?
- unity3d - Unity:更新 UI 文本的文本字段会在前一个字符串的顶部绘制新字符串
- r - R:为面板数据中的每个日期创建具有四分位数排名的列
- excel - VBA - 重复数据的范围选择
- javascript - Ajax 成功事件在显示 200 状态代码的网络选项卡中不起作用
- android - 图形视图 - X 轴不是实时刷新 - Android 工作室
- angularjs - 使用 Injector 类代替 ReflectiveInjector 类
- excel - Excel 问题:过滤第 1 列,在第 2 列中查找最后一个,返回值第 3 列
- android - Flutter 有状态的小部件,子级不更新状态