楼主说得没错,在这个函数里面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);
scanf("%d%f",&j->coef,&j->expn);把&都去掉试试
p是头结点,不过是空的
就这段程序来说,是没有问题的