求教C语言高手:版我看一下这段代码

codetown 2012-02-19 12:55:15
菜鸟求教:以下这段代码不知错在哪里?请高手帮忙

#include<stdio.h>
#include<malloc.h>
typedef struct s1
{
int data;
struct s1* next;
} NODE;
push(NODE* head,int value)
{
NODE* tmp=head;
head=(NODE*)malloc(sizeof(NODE));
head->data=value;
printf("%d",head->data);
head->next=tmp;
}
print(NODE* head)
{
NODE* itNode=head;
while(itNode)
{
printf("%d\n",itNode->data);
itNode=itNode->next;
}
}
int main(void)
{
int i;
NODE* mylist=0;
for(i=1;i<10;++i)
push(mylist,i);
print(mylist);
return 0;
}
改一下
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 relaxisland 的回复:]
push(NODE* head,int value)
{
NODE* tmp=head;
head=(NODE*)malloc(sizeof(NODE));
head->data=value;
printf("%d",head->data);
head->next=tmp;
}的函数必须采用二级指针,采用把 head传回来

push(NODE** head,……
[/Quote]

原因,lz 可以读一下林锐博士的 高质量c/c++编程
zhongjilei 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 relaxisland 的回复:]
push(NODE* head,int value)
{
NODE* tmp=head;
head=(NODE*)malloc(sizeof(NODE));
head->data=value;
printf("%d",head->data);
head->next=tmp;
}的函数必须采用二级指针,采用把 head传回来

push(NODE** head,……
[/Quote]

顶,另外有个问题,函数要有返回类型,虽然有的编译器会
默认给你填上返回int,有时候还是会出问题的
所以一定要将返回类型写上,没有的话写void
要养成好习惯
leo_dengzx 2012-02-19
  • 打赏
  • 举报
回复
楼上正确。也可以提前分配好一个节点,每次push自动分配下一个,这样就可以不用二级指针。
relaxisland 2012-02-19
  • 打赏
  • 举报
回复
push(NODE* head,int value)
{
NODE* tmp=head;
head=(NODE*)malloc(sizeof(NODE));
head->data=value;
printf("%d",head->data);
head->next=tmp;
}的函数必须采用二级指针,采用把 head传回来

push(NODE** head,int value)
{
NODE* tmp=*head;
*head=(NODE*)malloc(sizeof(NODE));
*head->data=value;
printf("%d",*head->data);
*head->next=tmp;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧