gpt4 book ai didi

c - 捆绑 Malloc 调用

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:51 25 4
gpt4 key购买 nike

我正在浏览 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com