C ++通过指针传递

时间:2010-09-19 16:48:51

标签: c++

伙计们,我对c ++很新。我刚刚写了这堂课:

class planet
{
public:
 float angularSpeed;
 float angle;
};

这是一个试图修改对象角度的函数:

void foo(planet* p) 
{
  p->angle = p->angle + p->angularSpeed;
}

planet* bar = new planet();
bar->angularSpeed = 1;
bar->angle = 2;
foo(bar);

看起来酒吧的角度根本没有变化。

2 个答案:

答案 0 :(得分:4)

请注意,您通过指针传递bar,而不是通过引用传递。传递参考将如下所示:

void foo(planet& p)  // note: & instead of *
{
    p.angle += p.angularSpeed;   // note: . instead of ->
}

Pass-by-reference具有额外的好处,p不能是空引用。因此,您的函数不能再导致任何null解除引用错误。

其次,这是一个细节,如果您的planet仅包含公共成员变量,您也可以声明struct(默认可访问性为public)。

PS:据我所见,你的代码应该工作;至少你向我们展示的部分。

答案 1 :(得分:3)

外观必须具有欺骗性,因为代码应导致foo(bar)更改angle字段的内容。

顺便说一句,这不是通过引用传递,而是通过指针传递。你能改变头衔吗?

通过引用传递(更好)将是

void foo(planet& p) {
p.angle += p.angularSpeed;
}

planet bar;
bar.angularSpeed=1;
bar.angle=2;
foo(bar);

您可能还会考虑planet的构造函数,该构造函数将angleangularSpeed的初始值作为参数,并定义一个默认构造函数,将它们都设置为0.否则您有由于planet个实例中的未设置值而导致的错误服务器场。

相关问题