2011-01-08 50 views

回答

8

此外,在his response解釋了James,讓我補充一個更重要的一點吧。

雖然可以寫Class* &參照指針),其是用C完全有效++而已,也可以不寫Class& *(指針引用),因爲你不能具有一個指向參考於任何類型的。在C++中,指向引用的指針是非法的。

§8.3.2/ 4從語言規範讀出,

有應是 沒有引用任何參考文獻,沒有參考文獻, 和沒有指針引用的陣列。


如果我有C類,我應該怎麼傳 到功能1()?

你可以寫你的調用代碼是這樣的:

Class *ptrClass; 

//your code; may be you want to initialize ptrClass; 

function1(ptrClass); 

//if you change the value of the pointer (i.e ptrClass) in function1(), 
//that value will be reflected here! 
//your code 
7

對於類型TT*是指向T類型的對象,所以Class*是一個指向Class對象。

對於類型TT&T類型的對象的引用,所以把它們放在一起,是Class*&的指針的引用時Class對象。

0
Class c; 
Class* c_ptr = &c; 
function1(c_ptr); 

會工作。但請注意,右值引用只能在C++ 0x下使用,而大多數編譯器尚未完全實現它們。因此,以下將不起作用:

Class c; 
function1(&c); 
0

如上所述,對指向Class的引用。

  • 你傳遞一個Class *的功能
  • 功能可以將指針更改爲不同的一個

這是一個相當罕見的接口,你需要更多的細節知道指針是什麼預計,以及你與他們有什麼關係。

兩個例子:

迭代

bool GetNext(Classs *& class) 
{ 
    if (class == 0) 
    { 
    class = someList.GetFirstObject(); 
    return true; 
    } 

    class = somePool.GetObjectAbove(class); // get next 
    return class != 0;  
} 

// Use for oterating through items: 
Class * value = 0; 
while (GetNext(value)) 
    Handle(value); 

完全不同的東西

void function (Class *& obj) 
{ 
    if (IsFullMoon()) 
    { 
     delete obj; 
     obj = new Class(GetMoonPos()); 
    } 
} 

在這種情況下,你通過必須是新分配的指針,指針您收到您需要傳遞給function ag ain,或者由你來delete'd。

相關問題