C语言的数据结构问题,高手请进!

void creatpolyn(polyn *p,int m)
{
int i;
polyn *j;
h=(polyn*)malloc(sizeof(polyn));
p=(polyn*)malloc(sizeof(polyn));
p->next=NULL;
for(i=1;i<=m;++i)
{
j=(polyn*)malloc(sizeof(polyn));
scanf("%d%f",&j->coef,&j->expn);
j->next=p->next;
p->next=j;
}

}
相信学过数据结构的都做过多项式相加的这道题吧。
这是我的创建多项式链表的函数,但是输出的时候却完全不一样。
运行之后不是应该p就是这个链表的首地址吗?请指教!
谢谢!

楼主说得没错,在这个函数里面p是这个链表的头节点地址,但是出了这个函数就不一定了。
如果 说 你是这样就不行 如下:
polyn *p;
reatpolyn(p,m);

要这样
polyn *p;
reatpolyn(&p,m); 申明函数写成这样
void creatpolyn(polyn **p,int m)
{
int i;
polyn *j;
// 这句没用去掉 h=(polyn*)malloc(sizeof(polyn));
*p=(polyn*)malloc(sizeof(polyn));
(*p)->next=NULL;
for(i=1;i<=m;++i)
{
j=(polyn*)malloc(sizeof(polyn));
scanf("%d%f",&j->coef,&j->expn);
j->next=(*p)->next;
(*p)->next=j;
}

}

使用双重指针,原理就是要利用函数来改变一个参数的值,就要传该参数的地址进去;

这里要改变p的值,就要传p的地址进去,但是p是指针类型,所以一个指向指针的指针作为参数传进去,定义函数像这样:creatpoly(polyn *(*p),int m);
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-10-08
scanf("%d%f",&j->coef,&j->expn);把&都去掉试试
第2个回答  2009-10-08
p是头结点,不过是空的
就这段程序来说,是没有问题的
相似回答