![](/img/trans.png)
[英]Use of logical not operator (twice) on right hand side of expression with pointer variable
[英]Brackets containing a datatype on right hand side of assignment operator
我试图理解为什么我有时会在 C 中的赋值运算符的右侧看到包含数据类型的括号。
具体来说,我试图实现一个链表,因为我还是 CI 的新手,所以我用它来指导我。
我遇到了这一行: struct node* link = (struct node*) malloc(sizeof(struct node));
它是instertFirst
函数的一部分,我猜它会向链表的头部添加一个新项目。
根据我目前的理解,将这一行分解为:创建一个名为link
的struct node
指针,该指针指向一个新分配的内存块,该内存块是node
结构的大小。
那么(struct node*)
的目的究竟是什么? 我最好的猜测是它为新分配的内存块提供了一种类型......?
函数malloc
返回一个类型为void *
的指针,与分配内存的对象无关。
在 C 中, void *
类型的指针可以分配给任何其他对象类型的指针。
所以你可以写
struct node* link = malloc(sizeof(struct node));
在 C++ 中,这种隐式转换是被禁止的。 您需要明确地将类型为void *
的返回指针void *
转换为类型struct node *
就像
struct node* link = (struct node*) malloc(sizeof(struct node));
在上面提到的 C 中,这样的转换是多余的,有时仅用于代码的自我记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.