2015-11-27 160 views
1

我檢查出的轉讓,而且我剛剛發現這個頭文件中,我有一個.cpp填滿:參數指針和參考?

void setData(const component_t * & data_ptr); // Copy the data from data_ptr to the internal buffer. 
//The function ASSUMES a proper size for the incomming data array. 

如果你想知道關於component_t,這是一個浮動通過typedef

所以,我的問題是,什麼樣的參數是data_ptr?它如何可以通過*和&(都是指針和引用?)來定義。

感謝您的見解!

+0

它是對指針的引用。看到這裏:http://stackoverflow.com/questions/28510101/passing-and-assigning-new-value-to-pointer-c – PaulMcKenzie

回答

4

參數data_ptr是對指向const component_t的指針的引用。

在C和C++中,指針並不是特別的。這只是一個指向內存地址的數字。通常,當您通過T*作爲參數時,您將通過值傳遞;也就是說,表示內存地址的數字只是被複制,就像按值傳遞了int一樣。

在這種情況下,您傳遞的是T*&或引用指針指向T.但它的工作原理與您通過int&或參考int的方式大致相同:這意味着您可以更改引用的對象。

因此,在這種情況下,你可以說,例如

void setData(const component_t * & data_ptr) 
{ 
    data_ptr = new component_t(/* args... */); 
} 

雖然這不一定做的事情在現代C的好辦法++。

+0

謝謝你。我會用一根10英尺長的杆子來測量距離並遠離這個;)但是,在沒有它的情況下我們不能做這些事的地方,這有什麼特別有用的地方? – sjsam

+0

@sjsam'int readint(char *&bufp){int x = * bufp ++; x << = 8; x | = * bufp ++; x << = 8; x | = * bufp ++; x << = 8; x | = * bufp ++;返回x;}'或類似的東西。它在遍歷一個緩衝區時更新指向緩衝區的指針,同時構建一個「int」。最後,你已經組裝了'int',並且bufp指向緩衝區中'int'之後的下一個位置。 – user4581301

+0

謝謝Tristan。欣賞這一點。 – sjsam