struct node *link = (struct node*) malloc(sizeof(struct node));
上面的代码是创建链接列表的较大程序的一部分。我已经了解了导致创建“节点”结构的代码。我只是不确定我提供的有关该结构的代码是什么。
上面的代码只是allocates维度为[[“ struct node”]的内存,然后cast使其具有相同的类型,并将返回的指向变量的指针称为链接。
首先,这表明您正在指向类型为node
的结构的指针
not一个struct node,但指向的是指向持有struct node的存储位置的指针。] >struct node *link = ...
然后,让我们看一下the signature of the malloc() function。
void *malloc(size_t size);
它告诉我们,返回类型为void *
,在C中,可以将其转换为任何其他类型,并且通常用于为调用者提供通用接口(类似于C ++或其他语言的模板,但与之不同) )。
[使用下面的强制转换,我们正在将void *
,即malloc()
的返回类型转换为指向类型结点的结构体的指针,即struct node*
(struct node*) malloc(...);
查看传递给malloc()
函数的参数,该参数给出了以字符大小的存储单位度量的表达式的大小(sizeof(char)
保证为1)
...sizeof(struct node)...
您正在要求编译器返回struct node
的大小(当然,这取决于结构的成员)。
全部放在一起...
struct node *link = (struct node*) malloc(sizeof(struct node));
分配与node类型的结构一样大的内存可以容纳并返回一个指向此内存块开始的指针。同时,标记该内存块,以便您(编译器)知道该区域是为节点类型的结构保留的。
Edit
:在C中,无需将malloc()返回的指针的类型强制转换为另一种指针类型。在您的情况下,从malloc()返回的void *
指针将自动提升为适当的指针类型,即struct node*
。