我有一個函數,它接受一個對象的引用:我有一個指向對象的指針。我如何調用需要引用的函數?
void move(Ball& ball);
我有另一個功能調用「移動()」,其有一個指針指向球:
void foo(Ball* ball){
//call move()
}
如何foo()
應該傳球給move()
?
它應該是這樣的:
或:
move(ball);
或:
move(&ball);
我有一個函數,它接受一個對象的引用:我有一個指向對象的指針。我如何調用需要引用的函數?
void move(Ball& ball);
我有另一個功能調用「移動()」,其有一個指針指向球:
void foo(Ball* ball){
//call move()
}
如何foo()
應該傳球給move()
?
它應該是這樣的:
或:
move(ball);
或:
move(&ball);
第一個,移動(*球)。
第二個,移動(球)試圖通過指針和第三個,移動(&球)試圖傳遞一個指針指針。
使用指針上的*運算符對其進行解引用,從而獲得一個Ball對象。既然你實際上將你的參數傳遞給一個接受Ball的函數(所以Ball引用),只有引用會被傳遞,而不是整個對象。正確的用法是:
但我建議你來命名變量的方式,「說話」關於他們的性質,所以ballPtr
或ball_ptr
會更合適,你將永遠不會忘記提領它。
move(* ball);
這是爲什麼。您可以將參考視爲基本上將指針指向其交給的對象。因此你想要對象本身,而不是指針。如果你調用move(ball),你將會得到一個指向指針的引用(指針),而不是對象。相反,移動(* ball)對指針進行解引用,然後引用將引用該解除引用的對象的指針。
第一個是正確的是移動(* ball) ball是一個指向該對象的指針,在取消引用其指向該指針的對象之後,需要對其進行取消引用。
你有編譯器嗎?爲什麼不自己測試一下。懶惰的屁股。 – shoosh 2009-02-16 09:02:48