2012-04-16 23 views
109

如何將指針(Object *ob)傳遞給原型爲void foo(Object &)的函數?如何將指針轉換爲C++中的引用

+0

標題說 「投[原文如此]參照指針」,但問題用指針開始並需要參考。它是哪個方向? – MSalters 2012-04-16 10:56:09

+0

@MSalters它應該*轉換*。我在編輯它。但我一直在尋找任何解決方案,所以我提到* cast * – Dewsworld 2012-04-16 11:00:53

回答

147

這樣稱呼它:

foo(*ob); 

注意,沒有鑄造怎麼回事,在你的問題標題建議。我們所做的所有事情都是去引用指向我們傳遞給函數的對象的指針。

+18

@Ricobob這就是這麼經常發生的事情。對易於理解的簡單問題的回答往往會獲得大量的贊成票。由於選民無法輕易判斷優點,所以對棘手問題的長時間複雜答案往往得不到讚賞。至於代表,由於代表資格,我對此沒有任何意見。 ;-)但我衷心同意。我希望複雜的答案獲得更多的代表。 – 2012-04-16 21:42:37

+0

@DavidHeffernan是的,這似乎是問題所在 - 我想這是一個問題,需要MetaSO - 如果有人還沒有提出它。 – Ricibob 2012-04-16 21:47:38

+0

@ricobob我希望它已經被提出。 – 2012-04-16 21:49:39

31
foo(*ob); 

+0

猜測和添加很多...通常不是一個很好的答案的格式在這裏(儘管在這種情況下它是正確的),這可能就是爲什麼你有一個downvote。 – KillianDS 2012-04-16 11:20:45

+5

bhhaaa,我添加了「我猜」,因爲它讓我至少寫了30個字符。這也是我添加「...........」的方式 – 2012-04-16 11:41:20

+10

@RoeeGavirel我是你的第一個選舉人,因爲我覺得自己的決定很苛刻。 FWIW你可以超過30個字符的限制,但添加一個HTML註釋<!----------------------------->我做了我的答案的第一個版本!我的編輯到你的答案顯示如何。 – 2012-04-16 12:04:25

0

用於鑄造指針全部示例反對

Online demo

class myClass 
{ 
    public: 
    void sayHello() 
    { 
    cout << "Hello"; 
    } 
}; 

int main() 
{ 
    myClass* myPointer; 
    myClass myObject = myClass(* myPointer); // Cast pointer to object 
    myObject.sayHello(); 

    return 0; 
} 
+0

我很驚訝onlinegdb適用於此,因爲這裏有很多問題。 首先,myPointer未初始化 - new myClass()在哪裏?其次,標記爲「//指向對象的轉換指針」的行會這樣做,然後進行一堆複製。當它被分配給myClass myObject時,從解引用的未初始化的指針構造另一個myClass,然後(取決於編譯器)。 – 2018-02-27 10:13:46

相關問題