在C中的链表中创建链接

在C中的链表中创建链接,c,struct,linked-list,malloc,nodes,C,Struct,Linked List,Malloc,Nodes,下面是在列表中创建链接的代码,我从internet上阅读了该代码,试图理解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; li

下面是在列表中创建链接的代码,我从internet上阅读了该代码,试图理解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函数为大小由size指定且值不确定的对象分配空间

我的理解是星号必须位于指针名称之前,但它必须位于结构名称的末尾

在这里,您没有取消引用任何内容。相反,你是在打字。(我想再次重申,这是不必要的)


struct node*
这里是指针变量的一种类型。同样的
int
double
也是一个类型,这也是一个类型。

不需要强制转换
malloc
的返回值

根据标准7.22.3.4

malloc函数返回空指针或指向 分配的空间

您应该检查它的返回值,以了解它是否成功

马洛克做什么? malloc函数为大小由size指定且值不确定的对象分配空间

我的理解是星号必须位于指针名称之前,但它必须位于结构名称的末尾

在这里,您没有取消引用任何内容。相反,你是在打字。(我想再次重申,这是不必要的)


struct node*
这里是指针变量的一种类型。同样的,
int
double
是一种类型,这也是一种类型。

假设您必须创建一个包含一些实体的学生数据库

 struct node
    {
       int id;
       char name [100];
    };
接下来呢,

struct node *link = (struct node*) malloc(sizeof(struct node));
上线是如何工作的?您需要创建一个节点或
内存
,因此如何创建它,请使用
malloc()
。接下来要创建的
内存量
等于结构的
数据成员的
总大小
,因此

 struct node *link = malloc(sizeof(struct node));
这里的
link
只不过是我们创建的动态内存的名称,用于将一些数据放入其中。创建内存后,将一些数据放入内存

   scanf("%d %s\n",&link->id,link->name);
同样地,您可以多次执行上述任务

打字不是强制性的,也不建议这样做。所以下面的陈述是正确的


结构节点*link=malloc(sizeof(结构节点))

假设您必须创建具有某些实体的学生数据库

 struct node
    {
       int id;
       char name [100];
    };
接下来呢,

struct node *link = (struct node*) malloc(sizeof(struct node));
上线是如何工作的?您需要创建一个节点或
内存
,因此如何创建它,请使用
malloc()
。接下来要创建的
内存量
等于结构的
数据成员的
总大小
,因此

 struct node *link = malloc(sizeof(struct node));
这里的
link
只不过是我们创建的动态内存的名称,用于将一些数据放入其中。创建内存后,将一些数据放入内存

   scanf("%d %s\n",&link->id,link->name);
同样地,您可以多次执行上述任务

打字不是强制性的,也不建议这样做。所以下面的陈述是正确的


结构节点*link=malloc(sizeof(结构节点))

为了创建一个链表,您必须分配单元-在您的情况下:

结构节点

因此,要么为列表预先分配内存,要么在每次向列表中添加节点时动态分配内存,节点的内存必须从某个地方重新分配,在这种情况下,malloc就是这样做的


希望这有助于

为了创建一个链表,您必须分配单位-在您的情况下:

结构节点

因此,要么为列表预先分配内存,要么在每次向列表中添加节点时动态分配内存,节点的内存必须从某个地方重新分配,在这种情况下,malloc就是这样做的


希望这对您有所帮助

您不需要强制转换。正确地
struct node*link=malloc(sizeof*link)
then
if(link==NULL){/*handleerror*/}
您不需要强制转换
然后
如果(link==NULL){/*handle error*/}
假设您必须创建包含3个具有某些实体的学生的数据库。好的,但是你在哪里使用这3个值呢?@MFisherKDX我只是举个例子,提问的人可以使用结构数组,然后分配相同的内存。假设你必须创建包含3个学生的数据库,其中有一些实体。好的,但是你在哪里使用这个3值呢?@MFisherKDX我只是举个例子,问这个问题的人可以使用结构数组,然后分配相同的内存。