首页 > 解决方案 > 捆绑 Malloc 调用

问题描述

我正在浏览 SO 并发现了一些对我提出问题的代码。

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;};

标签: cmemory-managementlinked-listmallocnodes

解决方案


malloc返回一个指向指定大小的内存区域的指针。

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

数组中的指针和索引是可互换的,如本答案中所述。


推荐阅读