理解c中的一行代码有困难

时间:2016-06-23 10:32:52

标签: c pointers casting

我正在进行一项练习,其中这是一段代码:

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;

3 个答案:

答案 0 :(得分:3)

heap是一个大小为SIZE的字节数组。

node_listnode_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;左侧所需的结构节点类型等号。

希望它有所帮助:)