【问题标题】:malloc() function in C [closed]C中的malloc()函数[关闭]
【发布时间】:2009-08-01 11:34:00
【问题描述】:

谁能解释一下?

struct node 
{ 
    int data; 
    struct node * link; 
} 
main() 
{
    struct node *p, *list, *temp; 
    list = p = temp = NULL; 
    ......................... 
    ......................... 
} 

addbeg() 
{ 
    int x;
    temp=malloc(sizeof(struct node));
    scanf("%d", &x); 
    temp->data=x;
    temp->link = list;
    list=temp;
}

这是一段通过C语言在链表中输入数据的代码。代码不完整,但我认为它足以达到目的。请基本上解释这些代码:

 temp=malloc(sizeof(struct node));

 temp->link = list;
 list=temp;.

【问题讨论】:

    标签: c malloc


    【解决方案1】:

    malloc() 用于分配内存 - 在这种情况下用于新节点。

    您的代码中定义的addbeg() 函数执行以下操作:

    1. 定义一个临时变量x
    2. 为新节点分配空间。
    3. 输入一个整数(%d 代码到scanf)并将其存储在x 中。
    4. 将保存到x 的值存储在新分配节点的数据字段中。
    5. 将变量“list”指向的列表的旧“头”作为链接存储在新分配的节点中。
    6. 将新节点设置为存储在变量“list”中的列表的新头。

    这是一个非常基本的整数链表 (http://en.wikipedia.org/wiki/Linked_list) 实现。

    【讨论】:

    • 您可以添加一个有用的注释,即代码最终应该确保每个分配的内存都使用free() 释放,喃喃自语“内存泄漏”和“对于小型学习程序没那么重要”但在大型长期运行的项目中会这样做,所以你也可以在小型学习项目中学习如何正确地做到这一点。
    • 他的程序无论如何都不会运行,除非 listtemp 被传递给 addbeg(),或者 addbeg() 在 main 中定义。
    • addbeg 不能在标准 C 的 main 中定义。一些编译器允许它作为扩展,但它不是有效的 C。
    • 首先代码没有完成,可能我们可以将 temp 和 list 传递给 addbeg() 或者我应该在 main 之外声明 temp 和 list 作为全局变量,但我从书中选择了这段代码,因为我没看懂。非常感谢您的回复。
    【解决方案2】:

    第一行:为列表的单个附加节点分配内存。

    第二行:将当前列表作为该元素之后的延续。

    第三行:使当前元素成为列表的开头。

    【讨论】:

      【解决方案3】:

      temp 和 list 在 addbeg 中不可见,因为它们是在 main 中声明的。它们要么需要传递给 addbeg,要么需要在 main (global, yuck) 之外声明。

      【讨论】:

        【解决方案4】:

        malloc 为新节点分配空间。

        temp->link = list
        

        list = temp
        

        使该新节点成为列表的头部。

        【讨论】:

          猜你喜欢
          • 2018-12-22
          • 1970-01-01
          • 2021-11-27
          • 1970-01-01
          • 2011-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多