今天写多项式的加法运算,和乘法运算,但是在写加法运算的过程中遇到点问题,有关初始化的。
//多项式的创建
void Create3(polynominal* p)
{
PNode* pn, * pre, * q;
int i;
p->head = (PNode*)malloc(sizeof(PNode)); //生成表头结点
p->head->exp = -1;
p->head->link = NULL;
printf("\n注意:输入‘#’则结束输入");
for (i=1;;i++)
{
pn = (PNode*)malloc(sizeof(PNode));
printf("\n第i个单项式的系数为:");
scanf_s("%d", &pn->coef); //输入项的系数
printf("\n第i个单项式的指数为:");
scanf_s("%d", &pn->exp); //输入项的指数
if (pn->exp = '#')
break; //结束输入
pre = p->head;
q = p->head->link;
while (q && q->exp > pn->exp) //插入项并保持多项式的各项为降幂排列
{
pre = q;
q = q->link;
}
pn->link = q;
pre->link = pn;
}
}
上面那个创建函数里:
这一段应该是多项式的初始化吧(这一段函数是教材里面现有的)
问题来了!!!下面是我一开始写的主函数:
void main()
{
polynominal* p1, * p2;
/*------------------------加法操作-----------------------------*/
printf("\n请依次输入第一个多项式中单项式的系数与指数");
Create3(p1);
printf("\n第一个多项式为:");
Output3(*p1);
}
它说我未初始化,我问助教,他说我 p1 p2 没有分配空间并赋值为null
后来我参考之前写的链表代码,改成下面这个:
void main()
{
polynominal p1, p2;
/*------------------------加法操作-----------------------------*/
printf("\n请依次输入第一个多项式中单项式的系数与指数");
Create3(&p1);
printf("\n第一个多项式为:");
Output3(p1);
}
然后这个就成功了,我不太懂这是为什么。求大佬帮我解答一下。