我正在浏览 SO 并找到了 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;};
最佳答案
struct node *list = malloc(3 * sizeof(struct node));
==> 创建了一个三节点结构大小的内存,列表指向内存存储的开始。意思是list=&list[0] or *list = list[0], list+1=&(list[1]) or *(list+1)=list[1], list+2=&( list[2]) 或 *(list+2)=list[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;
}
关于c - 捆绑 Malloc 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527635/