在 C 语言的链表中创建链接



这是我从互联网上阅读的列表中创建链接的代码,以尝试理解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* 这里是指针变量的一种类型。就像intdouble是一种类型一样,这也是一种类型。

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

 struct node
    {
       int id;
       char name [100];
    };

接下来,

struct node *link = (struct node*) malloc(sizeof(struct node));

上行如何工作?你需要创建一个节点或者memory,那么你将如何创建它,使用malloc()。接下来的事情how much memory你要创建,等于你结构data memberstotal size,所以它使用

 struct node *link = malloc(sizeof(struct node));

在这里link只不过是我们创建的动态内存的名称,用于将一些数据放入其中。 创建内存后,将一些数据放入内存中。

   scanf("%d %sn",&link->id,link->name);

同样,您可以多次执行上述任务。

类型转换不是强制性的或不建议这样做。所以下面的陈述是正确的。

结构节点 *link = malloc(sizeof(struct node((;

为了创建一个链表,你必须分配单位 - 在你的例子中:

结构节点

因此,无论是为列表预先分配内存,

还是在每次向列表中添加节点时动态分配它们,节点的内存都必须从某个地方招募,在这种情况下 - malloc 会这样做。

希望有帮助

相关内容

  • 没有找到相关文章

最新更新