这是我从互联网上阅读的列表中创建链接的代码,以尝试理解c中的链表:
//insert link at first location
void insertFirst(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
//point it to old first node
link->next = head;
//point first to new first node
head = link;
}
我真的不明白以下行作为一个整体是如何工作的:
struct node *link = (struct node*) malloc(sizeof(struct node));
更具体地说:
(struct node*)
因为我的理解是星号必须位于指针名称之前,但它位于结构名称的末尾。如果我错了,请纠正我,如果可以的话,请解释一下这是如何工作的?
不需要强制转换 malloc
的返回值。
根据标准 7.22.3.4
malloc 函数返回空指针或指向 分配的空间。
您应该检查其返回值以了解它是否成功。
马洛克做什么?
malloc 函数为大小由大小指定且其值不确定的对象分配空间。
我的理解是星号必须位于指针名称之前,但它位于结构名称的末尾
在这里,您不会取消引用任何内容。相反,您正在进行类型转换。(我再次重复这是不必要的(。
struct node*
这里是指针变量的一种类型。就像int
或double
是一种类型一样,这也是一种类型。
假设您必须创建具有某些实体的学生数据库。
struct node
{
int id;
char name [100];
};
接下来,
struct node *link = (struct node*) malloc(sizeof(struct node));
上行如何工作?你需要创建一个节点或者memory
,那么你将如何创建它,使用malloc()
。接下来的事情how much memory
你要创建,等于你结构data members
的total size
,所以它使用
struct node *link = malloc(sizeof(struct node));
在这里link
只不过是我们创建的动态内存的名称,用于将一些数据放入其中。 创建内存后,将一些数据放入内存中。
scanf("%d %sn",&link->id,link->name);
同样,您可以多次执行上述任务。
类型转换不是强制性的或不建议这样做。所以下面的陈述是正确的。
结构节点 *link = malloc(sizeof(struct node((;
为了创建一个链表,你必须分配单位 - 在你的例子中:
结构节点
因此,无论是为列表预先分配内存,还是在每次向列表中添加节点时动态分配它们,节点的内存都必须从某个地方招募,在这种情况下 - malloc 会这样做。
希望有帮助