【发布时间】:2021-12-26 16:58:02
【问题描述】:
我是 C 初学者,在尝试实现链表时遇到了这段代码。
struct Node *ptr = malloc(sizeof(*ptr));
Node 结构如下所示:
struct Node {
int data;
struct Node *next;
};
我试图理解第一行。似乎malloc(sizeof(*ptr)) 已经知道ptr 的内容。左侧到底发生了什么,是在调用 malloc 之前发生的吗?
【问题讨论】:
-
如果你按照指针的方式来执行它是有道理的——它的意思是“给我空间来存放结构节点大小的东西”。如果你 make 是这样的自我参照,它显然更安全。我认为这是一种愚蠢的写法,因为它不是很清楚。每个人都知道我们想要结构节点的大小,所以我只写了结构节点,但我想这就是它的完成方式。
-
@LEF 这样写可以防止类型名称改变。
-
malloc 返回 void*,我认为它不起作用。您应该将其转换为 Node* 类型。
-
@ĐăngKhôi C 允许在没有演员表的情况下与
void *相互转换。 C++ 没有。 -
@dbush 您可以使用
malloc(sizeof(struct Node))防止更改变量名的类似参数。