链表在C中,随机输出? #包括 结构列表 { int数据; 结构列表*下一步; }; 结构列表*开始,*结束; void add(结构列表*头,结构列表*列表,int数据); 作废删除(结构列表*头,结构列表*尾); 内部主(空) { 开始=结束=空; 添加(开始、结束、空); 添加(开始、结束、空); printf(“第一个元素:%d”); 删除(开始、结束); 返回0; } 空添加(结构列表*头,结构列表*尾,整数数据) { if(tail==NULL) { head=tail=malloc(sizeof(结构列表)); head->data=data;head->next=NULL; }否则{ tail->next=malloc(sizeof(struct list)); tail=tail->next; 尾部->数据=数据; tail->next=NULL; } } 作废删除(结构列表*头,结构列表*尾) { 结构列表*temp; 如果(头=尾) { 自由(头); 头=尾=空; }否则{ 温度=头部->下一步; 自由(头); 压头=温度; } }
我的目标是返回3的输出,但继续得到随机结果。任何洞察都是值得赞赏的C函数的参数是通过值传递的。因此,对链表在C中,随机输出? #包括 结构列表 { int数据; 结构列表*下一步; }; 结构列表*开始,*结束; void add(结构列表*头,结构列表*列表,int数据); 作废删除(结构列表*头,结构列表*尾); 内部主(空) { 开始=结束=空; 添加(开始、结束、空); 添加(开始、结束、空); printf(“第一个元素:%d”); 删除(开始、结束); 返回0; } 空添加(结构列表*头,结构列表*尾,整数数据) { if(tail==NULL) { head=tail=malloc(sizeof(结构列表)); head->data=data;head->next=NULL; }否则{ tail->next=malloc(sizeof(struct list)); tail=tail->next; 尾部->数据=数据; tail->next=NULL; } } 作废删除(结构列表*头,结构列表*尾) { 结构列表*temp; 如果(头=尾) { 自由(头); 头=尾=空; }否则{ 温度=头部->下一步; 自由(头); 压头=温度; } },c,linked-list,C,Linked List,我的目标是返回3的输出,但继续得到随机结果。任何洞察都是值得赞赏的C函数的参数是通过值传递的。因此,对add()函数中head和tail的值所做的更改将不会反映在调用add()的main()中 而且,您似乎没有为printf()提供第二个参数,因此%d格式不会得到它将要查找的整数值 C函数的参数通过值传递。因此,对add()函数中head和tail的值所做的更改将不会反映在调用add()的main()中 而且,您似乎没有为printf()提供第二个参数,因此%d格式不会得到它将要查找的整数值 当
add()
函数中head
和tail
的值所做的更改将不会反映在调用add()
的main()
中
而且,您似乎没有为
printf()
提供第二个参数,因此%d
格式不会得到它将要查找的整数值 C函数的参数通过值传递。因此,对add()
函数中head
和tail
的值所做的更改将不会反映在调用add()
的main()
中
而且,您似乎没有为
printf()
提供第二个参数,因此%d
格式不会得到它将要查找的整数值 当您想要修改头部
和尾部
时,您需要向它们传递一个指针
i、 e
对另一个函数执行类似操作。然后头部和尾部也会在功能之外发生变化
线路
void add(struct list **head, struct list **tail, int data)
{
if(*tail==NULL)
{
*head = *tail = malloc(sizeof(struct list));
(*head)->data = data;
(*head)->next = NULL;
} else {
(*tail)->next = malloc(sizeof(struct list));
*tail = (*tail)->next;
(*tail)->data = data;
(*tail)->next = NULL;
}
}
它需要一个整数来打印-提供它-有关详细信息,请参阅手册页
<>避免在C程序中使用C++的关键字,如<代码>删除> />代码> < /p> < p>。如要修改<代码>头<代码>和<代码>尾<代码>,需要传递指针。 i、 e 对另一个函数执行类似操作。然后头部和尾部也会在功能之外发生变化 线路
void add(struct list **head, struct list **tail, int data)
{
if(*tail==NULL)
{
*head = *tail = malloc(sizeof(struct list));
(*head)->data = data;
(*head)->next = NULL;
} else {
(*tail)->next = malloc(sizeof(struct list));
*tail = (*tail)->next;
(*tail)->data = data;
(*tail)->next = NULL;
}
}
它需要一个整数来打印-提供它-有关详细信息,请参阅手册页
避免在C程序中使用C++的关键字,如<代码>删除> />代码> 这里存在许多问题。 首先,当向函数传递指针时,指针按值传递。对被调用函数中指针的任何更改都不会反映在调用函数中。要更改调用函数中的指针指向的对象,需要将指针传递给指针。因此,您的
add()
函数需要:
printf("First element: %d");
您的delete()
函数也需要进行类似的更改
其次,将NULL作为数据值传递给add函数。NULL是一个指针;它通常定义为宏,在实现中可以是(void*)0
。不应将其用作整数。将0
作为整数传递,不能为空
第三,你有这样的说法:
void add(struct list **head, struct list **tail, int data) {
if(*tail == NULL) {
*head = *tail = malloc(sizeof(struct list));
(*head)->data = data;
(*head)->next = NULL;
}
else {
(*tail)->next = malloc(sizeof(struct list));
(*tail) = (*tail)->next;
(*tail)->data = data;
(*tail)->next = NULL;
}
return;
}
格式字符串具有转换说明符%d
,但没有与%d
匹配的参数。这是未定义的行为。你到底想打印什么整数
您希望输出在哪里,原因是什么?这里有许多问题 首先,当向函数传递指针时,指针按值传递。对被调用函数中指针的任何更改都不会反映在调用函数中。要更改调用函数中的指针指向的对象,需要将指针传递给指针。因此,您的
add()
函数需要:
printf("First element: %d");
您的delete()
函数也需要进行类似的更改
其次,将NULL作为数据值传递给add函数。NULL是一个指针;它通常定义为宏,在实现中可以是(void*)0
。不应将其用作整数。将0
作为整数传递,不能为空
第三,你有这样的说法:
void add(struct list **head, struct list **tail, int data) {
if(*tail == NULL) {
*head = *tail = malloc(sizeof(struct list));
(*head)->data = data;
(*head)->next = NULL;
}
else {
(*tail)->next = malloc(sizeof(struct list));
(*tail) = (*tail)->next;
(*tail)->data = data;
(*tail)->next = NULL;
}
return;
}
格式字符串具有转换说明符%d
,但没有与%d
匹配的参数。这是未定义的行为。你到底想打印什么整数
您希望输出
3
,原因是什么?在您的程序中开始和结束是全局变量,因此不需要将其作为参数传递给其他函数,因为其他方法可以直接访问它
printf("First element: %d");
注意:
如果您不希望开始和结束是全局的,那么它可以是主函数的局部变量。在这里,您必须使用双指针机制或返回内存地址来保留修改 在程序中,start和end是全局变量,因此不需要将其作为参数传递给其他函数,因为其他方法可以直接访问它
printf("First element: %d");
注意:
如果您不希望开始和结束是全局的,那么它可以是主函数的局部变量。在这里,您必须使用双指针机制或返回内存地址来保留修改 你实际得到了什么结果?为什么你不能修复糟糕的格式,而不是道歉呢?为什么不在向全世界公布之前整理一下格式呢?和写这篇文章的时间差不多,可能会发现