繁体   English   中英

以下代码对结构指针有什么作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM