我正在进行一项练习,其中这是一段代码:
typedef struct node
{
size_t size;
struct node *next;
} node_t;
byte heap[SIZE];
node_t *node_list;
void heap_init()
{
node_list = (node_t*) heap;
node_list->size = SIZE;
node_list->next = NULL;
}
但我站在这条线上有一些麻烦:
node_list = (node_t*) heap;
答案 0 :(得分:3)
heap
是一个大小为SIZE
的字节数组。
node_list
是node_t
类型的指针。该指针分配给数组heap
的第一个字节。这样做是node_list
被分配给分配的内存位置。
我猜测列表的下一个指针将被分配到该阵列的更远位置。
这很可能模拟全局变量中的堆,并避免使用不能用于某些嵌入式系统的malloc
。
答案 1 :(得分:1)
代码使用为heap
分配的内存来存储node_t
实例,而不是使用malloc
函数函数之一来分配它。
变量heap
本身降级为指向byte*
的指针,代码显示为"我想将byte*
重新解释为node_t*
指针&# 34。
请注意,要实现此功能,值SIZE
必须至少为sizeof(node_t)
,否则node_t
实例将不适合heap
变量。< / p>
答案 2 :(得分:1)
您指向的代码似乎是使用不太常见的方法 分配内存,即字节数组。 而不是malloc或calloc的常用方法
立即强>
node_list =(node_t *)堆;
所有人都可以从这条线上推断出来 因为堆是一个字节数组,而
node_list 这是指针到结构节点类型指向的起始地址 >字节数组命名为堆,由于指针为 byte * type ,因此它被强制转换为 struct node * 类型。
人们可以推断它就像 struct node * ptr =(struct node *)malloc(sizeof(struct node));
这里(struct node *)用在malloc前面(sizeof(struct node)); to mallpecast void 由malloc返回的指针类型,以匹配&#39; =&#39;左侧所需的结构节点类型等号。
希望它有所帮助:)