2017-04-24 136 views
0

我需要一些幫助,你能告訴我如何獲得p2可變內容嗎?我可以通過t1和p1獲取變量,但我想使用p2來獲得生命值和法力值。C++對象指針

#include <iostream> 

using namespace std; 

class Mage{ 
public: 
    int health; 
    int mana; 
    Mage(int health, int mana){ 
     this->health = health; 
     this->mana = mana; 
    } 
}; 

int main(){ 

    Mage t1 = Mage(1,1); 
    Mage *p1 = &t1; 
    Mage **p2 = &p1; 

    cout << t1.health << endl; 
    cout << p1->health << endl; 
    cout << "how to print variable content with p2?" << endl; 

    return 0; 
} 
+4

'(* p2) - > health''怎麼樣? – Beginner

+6

@Beginner有這個權利,但是如果你發現自己在一個簡單的教育範例之外徘徊指向指針,問問自己「爲什麼我要再次這樣做?」你很少需要一個以上的間接尋址級別,當它出現時,引用指針(Mage *&p2)可能是更好的選擇。 – user4581301

+0

@Beginner它的工作,謝謝 – ek926m

回答

1

使用

cout << (*p2)->health << endl; 

*有兩層含義:聲明指針和取消引用指針。但由於->的優先級高於*,因此您需要將*p2放入揹包中。

1

你的例子表明你正在尋找一個一次解除引用兩次的操作符。在C++中沒有。

兩種方式來實現你想要的。第一個已經提到,去

std::cout << (*p2)->health << std::endl; 

第二個可以指出的是,p1->health相當於(*p1).health被發現。因此,(*p2)->health相當於(**p2).health。連續:

std::cout << t1.health << std::endl; 
std::cout << (*p1).health << std::endl; 
std::cout << (**p2).health << std::endl;