【问题标题】:How to make a new instance of a struct in c如何在c中创建结构的新实例
【发布时间】:2015-04-08 14:35:50
【问题描述】:

我是 C 的新手,因此仍在努力学习这门语言。我在头文件中创建了一个链表结构,我正在尝试创建这个结构的一个新实例。我知道在 java 中您可以使用 new 运算符,但我将如何在 c 中模仿这种行为?传统上我会想到以下几点:

linked.h 中的代码

typedef struct linked_list{
//assuming node type is implemented
node *next_node; 
}

linked.c 中的代码

linked_list *link = NULL;
link = malloc(number_nodes);
link->node_value = 10;

您可以提供的任何帮助对我都非常有帮助,因为我无法理解这个概念。

【问题讨论】:

    标签: c struct malloc dynamic-memory-allocation


    【解决方案1】:

    malloc 需要知道要分配多少字节,因此需要将节点数乘以一个节点的大小(以字节为单位)。

    变化:

    link = malloc(number_nodes);
    

    到

    link = malloc(number_nodes * sizeof(*link));
    

    或者如果你只想要一个结构:

    link = malloc(sizeof(*link));
    

    【讨论】:

    • 谢谢,但这会给我提供一个实际的实例吗?
    • 这将为您提供number_nodes 的linked_list 实例,这可能是您真正想要的,也可能不是。
    • 哦,不,我只想使用一个实例。一个链表,我的印象是我必须分配与链表一起使用的内存。因此,我将节点数传递给 malloc
    • 好吧,您发布的代码片段有些混乱,因此很难猜测您的实际意图是什么。您可能想在一本关于 C 的好书中学习一些链表代码,以更好地全面了解您需要做什么。
    • 好的,所以如果我只想为具有未知数量的节点的链表的一个实例分配足够的内存。我该怎么做?
    【解决方案2】:

    如果你想为struct linked_list 提供足够的内存,你所要做的就是

    struct linked_list * mylist = malloc(sizeof(*mylist));
    mylist -> next_node = NULL;
    

    对于你要添加的每个节点,你必须这样做

    struct node * mynewnode = malloc(sizeof(*mynewnode));
    mynewnode -> ... = ...; // fill in the data you have
    mynewnode -> next_node = mylist -> next_node;
    mylist -> next_node = mynewnode;
    

    你应该保持所有节点的内存相互独立,这样你就可以释放它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      相关资源
      最近更新 更多