赋值运算符右侧包含数据类型的括号

Brackets containing a datatype on right hand side of assignment operator

我试图理解为什么我有时会在 C 中的赋值运算符的右侧看到包含数据类型的括号。

具体来说,我试图实现一个链表,因为我对 C 还是个新手,所以我使用 this 来指导我。

我看到了这条线:struct node* link = (struct node*) malloc(sizeof(struct node));

它是 instertFirst 函数的一部分,我猜它会向链表的头部添加一个新项。

根据我目前的理解将这一行分解为:创建一个名为 linkstruct node 指针,它指向一个新分配的内存块,其大小为 node 结构。

那么 (struct node*) 的目的到底是什么?我最好的猜测是它为新分配的内存块提供了一种类型...?

函数 malloc returns 类型的指针 void * 独立于为哪个对象分配内存。

在 C 中,void * 类型的指针可以分配给任何其他对象类型的指针。

所以你可以这样写

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

在 C++ 中,这种隐式转换是被禁止的。您需要明确地将返回的 void * 类型的指针转​​换为 struct node * 类型,例如

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

在上面提到的 C 中,这样的转换是多余的,有时仅用于代码的自我记录。