c - 以下代码对结构指针有什么作用?
问题描述
struct node *link = (struct node*) malloc(sizeof(struct node));
上面的代码是创建链表的更大程序的一部分。我已经拥有并理解了导致这个创建结构“节点”的代码。我只是不确定我提供的代码对那个结构做了什么。
解决方案
好吧,让我们一点一点地看一遍......
首先,这告诉您在指向类型结构的指针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*
.
推荐阅读
- c++ - 使用 C 时间函数来测量时间:它们是否抗代码重新排序?
- django - Celery Beat 在启动时发送任务(在预定时间之前)
- javascript - 从方法中获取目标元素(无事件)
- python-3.x - 计算字符串,得到一个空集,为什么?(蟒蛇3)
- python - 如何制作一个检测缺失字符串的程序
- maven - 在 jar 文件中找不到 pom 依赖项
- python - PyQT:在 Python 中将函数分配给 GUI
- python - 在 1 行上打印字典的所有元素,以空格分隔
- asp.net-core - 如何根据数据库更新触发通知到 Asp.Net Core 5.0 MVC 应用程序?
- go - 使用 mapstructure.Decode 将递归 []interface{} 解码为 []struct{} 返回 nil?