【数据结构】c语言中Attach()意义

枇杷鹭 2019-09-21 11:02:55
下面是不太带结点链表实现多项式相加的一部分c代码:

struct PolyNode
{
int coef; // 系数
int expon; // 指数
struct PolyNode *link; // 指向下一节点的指针
};
typedef struct PolyNode *Polynomial;
Polynomial P1, P2;

Polynomial PolyAdd(Polynomial P1, Polynomial P2)
{
Polynomial front, rear, temp;
int sum;
rear = (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while (P1 && P2)
{
switch (Compare(P1->expon, P2->expon))
{
case 1:
Attach(P1->coef, P1->expon, &rear);
// Attach()将系数、指数形成新的项,拷贝到rear的后面
P1 = P1->link;
break;
case -1:
Attach(P2->coef, P2->expon, &rear);
P2 = P2->link;
case 0:
sum = P1->coef + P2->coef;
if (sum)
Attach(sum, P1->expon, &rear);
P1 = P1->link;
P2 = P2->link;
break;
}

}
}


Attach(P1->coef, P1->expon, &rear);这句没有看懂,求解~

另,有什么c库的官网么,在搜索引擎上没有查到Attach()的解释
...全文
2327 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
浙大陈越数据结构课 哈哈哈哈哈哈我也刚刷到这里
枇杷鹭 2020-02-19
  • 打赏
  • 举报
回复
引用 4 楼 weixin_41580386 的回复:
请问你知不知道Attach函数为什么不能这样定义? void Attach(int c, int e, Polynomial  pRear){     Polynomial P;          P = (Polynomial)malloc(sizeof(struct PolyNode));     P->coef=c;     P->expon=e;     P->link = NULL;     pRear->link = P;     pRear=P; } 然后在主函数里引用Attach函数时这样写 Attach(P1->coef, P1->expon, rear); 这样为什么就是错的呢,很疑惑
你好,我的理解是: (1)首先明确`pRear`是一个指针,指向一个结点,那`pRear`本身就是一个地址变量; (2)其次,明确C中都是传值调用。 在你的Attach(P1->coef, P1->expon, rear)中:

pRear->link = P;
// 这句话本身是没有问题的,可以对 link 进行赋值
pRear=P;
// 但是这句话就不能起到赋值的效果,因为:
// 0. 调用 Attach(P1->coef, P1->expon, rear) 时,将rear的值(因为`rear`是一个指针,所以其值是一个地址变量)赋值一份,给局部变量pRear赋上
// 1. 此时 pRear 中保存地址变量,但其本身并不是指向 *rear 的指针;
// 2. 换句话说,如果 pRear 的值改变,那么不对 rear 造成影响。
// 3. 因此,想要改变 rear 的值,应该将 rear 的地址传入,而非将其本身。
总结起来就是: A 是 B 的指针,B 是 C 的指针,在函数调用中,想改变C的值,需要将&C(即B)传入,想改变B的值,需要将&B(即A)传入。 函数调用中,改变变量的值,对其指针进行操作;改变指针的值,对指针的指针进行操作。
edger_wx 2020-02-18
  • 打赏
  • 举报
回复
请问你知不知道Attach函数为什么不能这样定义?
void Attach(int c, int e, Polynomial  pRear){
    Polynomial P;
    
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;
    P->expon=e;
    P->link = NULL;
    pRear->link = P;
    pRear=P;
}
然后在主函数里引用Attach函数时这样写
Attach(P1->coef, P1->expon, rear);
这样为什么就是错的呢,很疑惑
铖邑 2019-09-24
  • 打赏
  • 举报
回复 1
自带函数都是小写字母打头的
枇杷鹭 2019-09-21
  • 打赏
  • 举报
回复 2
引用 1 楼 wowpH 的回复:
网上搜不到,那可能是自定义函数。。。。你没copy全?
您说对了,我以为Attach像Compare一样是自带函数,刚遇到就把课程暂停一个劲研究... 老师确实在下一页ppt马上讲了Attach()的定义。

void Attach(int c, int e, Polynomial *pRear){
    Polynomial P;
    
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;
    P->expon=e;
    P->link = NULL;
    (*pRear)->link = P;
    *pRear=P;
}
wowpH 2019-09-21
  • 打赏
  • 举报
回复 1
网上搜不到,那可能是自定义函数。。。。你没copy全?

70,021

社区成员

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

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