gpt4 book ai didi

c - 关于 C 列表的练习

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

我需要有关链表的以下代码的帮助:

#include <stdlib.h>
#include <stdio.h>

struct nodo {
int d;
struct nodo *next;
};

struct nodo *full();

int main()
{
struct nodo *l;
/* l=(struct nodo *)malloc(sizeof(struct nodo)); */
l = full();
while(l!=NULL) {
printf("-->%d\n", l->d);
l =l->next;
}
system("PAUSE");
}
struct nodo *full()
{
int i;
struct nodo *head, *nes;
head = (struct nodo *)malloc(sizeof(struct nodo));
head->next = NULL;
for(i = 1; i < 5; i++) {
nes = (struct nodo *)malloc(sizeof(struct nodo));
printf("Insert the %d element:\n", i);
scanf("%d", &nes->d);
nes->next = head;
head = nes;
}
return head;
}

例如,如果我尝试输入 1, 2, 3, 4,我会得到以下输出:

 -->4
-->3
-->2
-->1
-->9708864

为什么我得到最后一个数字?我的代码有什么问题?

最佳答案

正如@Vinska 在评论中指出的那样,full() 的第 3 行不是必需的;它正在创建一个额外的节点。

有问题的行是

head = (struct nodo *)malloc(sizeof(struct nodo));

相反,说

head = NULL

使用您现有的代码,您的链表有 5 个元素。第一个是在上述行上创建的。其余四个项目是在循环中创建的,正如预期的那样,总共有 5 个元素。

9708864 数字是垃圾值。当您调用 malloc() 时,它就是内存中发生的任何事情。这就是为什么您必须初始化所有变量!或者,在这种情况下,使用 memset()calloc() 将这些 block 设置为某个合理的值。 (但是,无论如何,该行在这里完全是多余的。)

祝你好运!

关于c - 关于 C 列表的练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11470129/

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