我知道類* CLS是一個指針,類& CLS取地址,但什麼是什麼是「類* CLS」在C++中的函數定義是什麼意思?
void fucction1(Class *&cls)
如果我已經Class c
,我應該怎麼傳遞給function1()
?
謝謝!
我知道類* CLS是一個指針,類& CLS取地址,但什麼是什麼是「類* CLS」在C++中的函數定義是什麼意思?
void fucction1(Class *&cls)
如果我已經Class c
,我應該怎麼傳遞給function1()
?
謝謝!
此外,在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
對於類型T
,T*
是指向T
類型的對象,所以Class*
是一個指向Class
對象。
對於類型T
,T&
是T
類型的對象的引用,所以把它們放在一起,是Class*&
的指針的引用時Class
對象。
Class c;
Class* c_ptr = &c;
function1(c_ptr);
會工作。但請注意,右值引用只能在C++ 0x下使用,而大多數編譯器尚未完全實現它們。因此,以下將不起作用:
Class c;
function1(&c);
如上所述,對指向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。