我是如此的浏览,发现该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));
==>创建了三个节点结构大小的存储器和列表指向存储器存储的开始。这意味着列表=&列表[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;
}
malloc
指针返回到具有指定大小的存储区域。
这个论点3 * sizeof(struct node)
说,区域大小是能够存储3层node
结构。
指针和索引数组中是可互换的,如在this answer讨论。