绑定Malloc调用
我浏览了一下,发现这给我提出了一个问题绑定Malloc调用,c,memory-management,linked-list,malloc,nodes,C,Memory Management,Linked List,Malloc,Nodes,我浏览了一下,发现这给我提出了一个问题 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;} 我试图理解
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;};
malloc
返回指向指定大小的内存区域的指针
参数3*sizeof(struct node)
表示区域大小能够存储3node
结构
数组中的指针和索引是可互换的,如中所述。
malloc
返回指向指定大小内存区域的指针
参数3*sizeof(struct node)
表示区域大小能够存储3node
结构
数组中的指针和索引是可互换的,如中所述
==>创建了一个三节点结构大小的内存,列表指向内存存储的开头。它的意思是list=&list[0]或*list=list[0],list+1=&(list[1])或*(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;
}
==>创建了一个三节点结构大小的内存,列表指向内存存储的开头。它的意思是list=&list[0]或*list=list[0],list+1=&(list[1])或*(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;
}
它返回一个指向
3*sizeof(struct node)
已分配内存字节的指针。为什么我可以使用数组索引对这些指针进行索引?因为list[I]
相当于*(list+I)
。在第一次调用中malloc()
返回的空间足够容纳3个struct node
的数组,并且指向的内存充分对齐,可以安全地将其强制转换到结构节点*
,并将其用作3个结构节点
值的数组。C标准要求保证“充分对齐”。它返回一个指向3*sizeof(struct node)
字节分配内存的指针。为什么我可以使用数组索引索引这些指针?因为list[I]
相当于*(list+I)
。malloc()返回的空间第一个调用中的
足够大,可以容纳3个结构节点的数组
,并且指向的内存充分对齐,可以安全地将其强制转换到结构节点*
,并将其用作3个结构节点
值的数组。C标准要求保证“充分对齐”。