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

时间:2013-11-30 16:12:54

标签: c++ pointers reference

好吧,这将是一个奇怪的(而且很可能是非常糟糕的)措辞问题,但是这里有。所以我试图理解一些类的代码,但我遇到了一些麻烦。我有:

这个原型:

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;

我得到一个分段错误,从我收集到的内容我们通过引用传入,并且参数需要在函数内分配给它们的值。我觉得我在这里遗漏了一些东西,我会很感激任何解释

2 个答案:

答案 0 :(得分:0)

首先,

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

其次,我认为你要完成的是: 1.将plist1复制到l1,将plist2复制到l2。 2.你改变了l1和l2。 3.将l1和l2的新值复制回plist1和plist2。

我不知道你复制这些课程的原因。也许存在一些条件,当发生时,您必须撤消所有更改。所以,由于你没有直接改变plist1和plist2,你只需跳过最后的归属。

答案 1 :(得分:0)

split_list函数可能需要输入列表并将其拆分为2个列表。

Poly l1 = *plist1;
Poly l2 = *plist1;

因为plist1被复制到l1和l2,我会说这是输入列表。由于它被复制到两者,因此排序算法可能通过基于某些标准从每个列表中删除元素来工作。使用以下内容替换它时出现分段错误的原因:

Poly l1;
Poly l2;

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

*plist1 = l1;
*plist2 = l2;

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