捆绑的malloc电话

问题描述 投票:0回答:2

我是如此的浏览,发现该some code提出的问题对我来说。

struct node* BuildOneTwoThree() {
struct node *list = malloc(3 * sizeof(struct node));

list[0].data = 1;
list[0].next = list+1;
list[1].data = 2;
list[1].next = list+2;
list[2].data = 3;
list[2].next = NULL;

return list;}

我想了解这个调用如何malloc的作品和返回结果是什么。难道它返回一个指针数组?如何工作的,我没想到的malloc这样的工作?

这似乎保证个体结构的存储索引是一个接一个,我想象可能是一个功能强大的或有用的工具。

另外对malloc这样的电话后会是没关系初始化数组索引为

list[0] = (struct node) {1, list +1};

注意:结构节点被定义为,

  struct node{
  int data;
  struct node *next;};
c memory-management linked-list malloc nodes
2个回答
1
投票
struct node *list = malloc(3 * sizeof(struct node));

==>创建了三个节点结构大小的存储器和列表指向存储器存储的开始。这意味着列表=&列表[0]或*列表=列表[0],列表+ 1 =&(列表[1])或*(列表+ 1)=列表[1],列表+ 2 =&(列表[2 ])或*(列表+ 2)=表[2]

list[0] = (struct node) {1, list +1};

==>是的,你可以做到这一点的方式。这是我作为修改这种方式,它工作得很好:

struct node* BuildOneTwoThree() {
    struct node *list = (struct node *)malloc(3 * sizeof(struct node));

    list[0] = { 1, list + 1 };
    list[1] = { 2, list + 2 };
    list[2] = { 3, NULL };
    return list;
}

1
投票

malloc指针返回到具有指定大小的存储区域。

这个论点3 * sizeof(struct node)说,区域大小是能够存储3层node结构。

指针和索引数组中是可互换的,如在this answer讨论。

© www.soinside.com 2019 - 2024. All rights reserved.