我有一个引用对象的函数:
void move(Ball& ball);
我有另一个函数调用'move()',它有一个指向ball的指针:
void foo(Ball* ball){
//call move()
}
foo()
如何将球传给move()
?
应该是这样的:
move(*ball);
或:
move(ball);
或:
move(&ball);
答案 0 :(得分:11)
第一个,移动(*球)。
第二个,move(ball)尝试传递指针,第三个,move(& ball)尝试传递一个指向指针的指针。
答案 1 :(得分:6)
移动(*球);
这就是原因。您可以将引用视为基本上指向它所传递的对象的指针。因此,您需要对象本身,而不是指针。如果你调用move(ball),你将获得指针的引用(指针),而不是对象。相反,移动(*球)取消引用指针,引用然后获取该解除引用对象的指针。
答案 2 :(得分:4)
使用指针上的*运算符取消引用它,从而获得Ball对象。因为您实际上是将参数传递给接受Ball&的函数。 (所以Ball参考)只传递参考,而不是整个对象。正确的用法是:
move(*ball);
但我建议您以“说出”其性质的方式命名变量,因此 ballPtr
或 ball_ptr
将是更合适,你永远不会忘记取消引用它。
答案 3 :(得分:1)
第一个是正确的是移动(*球) ball是指向对象的指针,在取消引用其指向球对象指向的对象后,需要取消引用它。