在C中的链表中创建链接
下面是在列表中创建链接的代码,我从internet上阅读了该代码,试图理解c语言中的链接列表:在C中的链表中创建链接,c,struct,linked-list,malloc,nodes,C,Struct,Linked List,Malloc,Nodes,下面是在列表中创建链接的代码,我从internet上阅读了该代码,试图理解c语言中的链接列表: //insert link at first location void insertFirst(int key, int data) { //create a link struct node *link = (struct node*) malloc(sizeof(struct node)); link->key = key; li
//insert link at first location
void insertFirst(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
//point it to old first node
link->next = head;
//point first to new first node
head = link;
}
我真的不明白以下这一行作为一个整体是如何工作的:
struct node *link = (struct node*) malloc(sizeof(struct node));
更具体地说:
(struct node*)
因为我的理解是星号必须位于指针名称之前,但它必须位于结构名称的末尾。如果我错了,请纠正我,如果可以,请解释这是如何工作的?不需要强制转换malloc的返回值 根据标准7.22.3.4 malloc函数返回空指针或指向 分配的空间 您应该检查它的返回值,以了解它是否成功 马洛克做什么? malloc函数为大小由size指定且值不确定的对象分配空间 我的理解是星号必须位于指针名称之前,但它必须位于结构名称的末尾 在这里,您没有取消引用任何内容。相反,你是在打字。(我想再次重申,这是不必要的)
struct node*
这里是指针变量的一种类型。同样的int
或double
也是一个类型,这也是一个类型。不需要强制转换malloc
的返回值
根据标准7.22.3.4
malloc函数返回空指针或指向
分配的空间
您应该检查它的返回值,以了解它是否成功
马洛克做什么?
malloc函数为大小由size指定且值不确定的对象分配空间
我的理解是星号必须位于指针名称之前,但它必须位于结构名称的末尾
在这里,您没有取消引用任何内容。相反,你是在打字。(我想再次重申,这是不必要的)
struct node*
这里是指针变量的一种类型。同样的,int
或double
是一种类型,这也是一种类型。假设您必须创建一个包含一些实体的学生数据库
struct node
{
int id;
char name [100];
};
接下来呢,
struct node *link = (struct node*) malloc(sizeof(struct node));
上线是如何工作的?您需要创建一个节点或内存
,因此如何创建它,请使用malloc()
。接下来要创建的内存量
等于结构的数据成员的总大小
,因此
struct node *link = malloc(sizeof(struct node));
这里的link
只不过是我们创建的动态内存的名称,用于将一些数据放入其中。创建内存后,将一些数据放入内存
scanf("%d %s\n",&link->id,link->name);
同样地,您可以多次执行上述任务
打字不是强制性的,也不建议这样做。所以下面的陈述是正确的
结构节点*link=malloc(sizeof(结构节点)) 假设您必须创建具有某些实体的学生数据库
struct node
{
int id;
char name [100];
};
接下来呢,
struct node *link = (struct node*) malloc(sizeof(struct node));
上线是如何工作的?您需要创建一个节点或内存
,因此如何创建它,请使用malloc()
。接下来要创建的内存量
等于结构的数据成员的总大小
,因此
struct node *link = malloc(sizeof(struct node));
这里的link
只不过是我们创建的动态内存的名称,用于将一些数据放入其中。创建内存后,将一些数据放入内存
scanf("%d %s\n",&link->id,link->name);
同样地,您可以多次执行上述任务
打字不是强制性的,也不建议这样做。所以下面的陈述是正确的
结构节点*link=malloc(sizeof(结构节点)) 为了创建一个链表,您必须分配单元-在您的情况下:
结构节点
因此,要么为列表预先分配内存,要么在每次向列表中添加节点时动态分配内存,节点的内存必须从某个地方重新分配,在这种情况下,malloc就是这样做的
希望这有助于为了创建一个链表,您必须分配单位-在您的情况下:
结构节点
因此,要么为列表预先分配内存,要么在每次向列表中添加节点时动态分配内存,节点的内存必须从某个地方重新分配,在这种情况下,malloc就是这样做的
希望这对您有所帮助您不需要强制转换。正确地struct node*link=malloc(sizeof*link)
thenif(link==NULL){/*handleerror*/}
您不需要强制转换
然后如果(link==NULL){/*handle error*/}
假设您必须创建包含3个具有某些实体的学生的数据库。好的,但是你在哪里使用这3个值呢?@MFisherKDX我只是举个例子,提问的人可以使用结构数组,然后分配相同的内存。假设你必须创建包含3个学生的数据库,其中有一些实体。好的,但是你在哪里使用这个3值呢?@MFisherKDX我只是举个例子,问这个问题的人可以使用结构数组,然后分配相同的内存。