C++:试图理解一些代码

C++: trying to understand some code

本文关键字:代码 C++      更新时间:2023-10-16

好吧,这将是一个措辞怪异(很可能很糟糕)的问题,但现在开始。所以我试图理解一个类的一些代码,但遇到了一些麻烦。我有:

这个原型:

void split_list(Poly& list1, Poly& list2);

其中Poly是指向typedef结构的typedef

然后我有了实际的功能:

void split_list(Poly* plist1, Poly* plist2){
  Poly l1 = *plist1;
  Poly l2 = *plist1;
  Poly* pp = &l1
  /*code does stuff w/ the l1 and l2 don't think the specifics are relevant to my 
  question*/
  l2 = *pp;
  (*pp) = 0;
  *plist1 = l1;
  *plist2 = l2;
} 

我的问题是为什么我们要设置l1&l2设置为*plist1,然后在最后设置*plist1=l1和*plist2=l2?因为当我这样做的时候:

Poly l1;
Poly l2;

我遇到了一个分段错误,根据我收集到的信息,我们通过引用传递,参数需要在函数中分配值。我觉得我在这里错过了一些东西,我很感激

的任何解释

所有冷杉,

或者通过引用传递,或者通过指针传递。我更喜欢第一个。

第二,我认为你正在努力实现的是:1.将plist1复制到l1,将plist2复制到l2。2.你改变了l1和l2。3.将l1和l2的新值复制回plist1和plist2。

我不明白的是你为什么要抄这些课。也许有某种条件,当发生时,您必须撤消所有更改。因此,由于您没有直接更改plist1和plist2,因此您只需跳过最后一个归因。

split_list函数可能会获取一个输入列表,并将其拆分为两个列表。
Poly l1 = *plist1;
Poly l2 = *plist1;

因为plist1被复制到l1和l2,所以我认为这是输入列表。由于它被复制到这两个列表中,排序算法可能会根据某些标准从每个列表中删除元素。将其替换为时出现分割错误的原因

Poly l1;
Poly l2;

很可能是因为Poly结构包含一个指针,该指针不指向任何内容,并且在列表排序时被访问。

*plist1 = l1;
*plist2 = l2;

在函数的末尾,它将拆分两个列表的结果分配给plist1和plist2作为其输出形式。