首页 > 解决方案 > 以下代码对结构指针有什么作用?

问题描述

struct node *link = (struct node*) malloc(sizeof(struct node));

上面的代码是创建链表的更大程序的一部分。我已经拥有并理解了导致这个创建结构“节点”的代码。我只是不确定我提供的代码对那个结构做了什么。

标签: cpointerscastingmallocstructure

解决方案


好吧,让我们一点一点地看一遍......

首先,这告诉您在指向类型结构的指针node 不是结构节点,而是指向包含结构节点的内存位置的指针

struct node *link = ... 

那么,我们来看看malloc() 函数的签名

void *malloc(size_t size);

它告诉我们返回类型是void *,在 C 中,它可以转换为任何其他类型,并且通常用于为调用者提供通用接口(类似于但不同于 C++ 或其他语言中的模板)。

通过下面的转换,我们将void *的返回类型malloc()转换为指向节点类型结构的指针,即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 类型的结构一样大的内存,并返回一个指向此内存块开头的指针。同时,标记这块内存,以便您(编译器)知道该区域是为 node 类型的结构保留的

编辑:在 C 中,您不需要将malloc()返回的指针类型转换为另一种指针类型。在您的情况下,void *malloc()返回的指针会自动提升为适当的指针类型,即struct node*.


推荐阅读