[英]What does the following code do in regards to structure pointers?
struct node *link = (struct node*) malloc(sizeof(struct node));
上面的代码是创建链表的更大程序的一部分。 我已经拥有并理解了导致此创建结构“节点”的代码。 我只是不确定我提供的代码对该结构有什么作用。
上面的代码简单地分配了维度“struct node”的内存,然后将其转换为相同的类型并将返回的指针分配给名为link的变量。
好吧,让我们一块一块来看看......
首先,这表明您在指向一个指向node
类型结构的指针而不是一个结构节点,而是一个指向保存结构节点的内存位置的指针
struct node *link = ...
然后,让我们看看malloc() 函数的签名。
void *malloc(size_t size);
它告诉我们返回类型是void *
,它在 C 中可以转换为任何其他类型,通常用于为调用者提供通用接口(类似于但与 C++ 或其他语言中的模板不同)。
使用下面的转换,我们将void *
, malloc()
的返回类型转换为指向 node 类型结构的指针,即struct node*
(struct node*) malloc(...);
查看传递给malloc()
函数的参数,它给出了以 char 大小的存储单元衡量的表达式的大小( sizeof(char)
保证为 1)
...sizeof(struct node)...
您要求编译器返回struct node
的大小(当然,这取决于结构的成员)。
把这一切放在一起...
struct node *link = (struct node*) malloc(sizeof(struct node));
分配与 node 类型的结构一样大的内存,并返回一个指向该内存块开头的指针。 同时,标记这块内存,以便您(编译器)知道该区域是为节点类型的结构保留的
编辑:在 C 中,您不需要将malloc()返回的指针类型转换为另一种指针类型。 在您的情况下, malloc()返回的void *
指针会自动提升为适当的指针类型,即struct node*
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.