2012-09-30 41 views
3

這是什麼意思?我明白通過引用傳遞參數是爲了傳遞引用,所以你可以直接修改它,而不需要返回,傳遞指針是相似的,但運行時間較慢。但是,我不明白什麼是* &。例如,什麼是「通過*&」的?

foo(int * & var) { } 
+5

我不知道你去哪裏「通過指針是相似的,但運行速度較慢」。對於所有意圖和目的,通過指針或引用傳遞對象的性能是相同的(並且通過引用傳遞通常使用指針下的指針來實現)。 –

回答

5

它通過引用傳遞指針,以便您可以更改指針指向的內容並將這些更改反映到調用方。

例如:

void notByReference(int *p) { 
    p = nullptr; 
} 

void byReference(int *&p) { 
    p = nullptr; 
} 

int main() { 
    int *i = new int; 
    notByReference(i); //i is not changed since a copy of the pointer was passed 
    byReference(i); //i itself is changed, leaking memory 
} 
+0

啊,我明白了,所以notByReference就像傳遞一個指針的值。 – Goyatuzo

+0

@Goyatuzo,是的,它通過價值傳遞指針,創建一個副本。副本指向相同的東西,所以無論它指向什麼都可以最終改變,但指針本身是不同的,所以修改它指向其他地方只對副本有效。 – chris

+0

太棒了!感謝您的快速和全面的答覆! – Goyatuzo

2

這樣就可以通過引用傳遞的指針。這使得函數有機會修改指針,並讓調用者看到該修改。

你不需要停在那裏。例如,可以通過引用傳遞指向int的指針的指針。

void foo(int** &var) 
1

請記住,鍵入像&*預選賽是相互獨立的。當你看到some_type&時,它僅僅意味着「引用sometype」,這又意味着該函數看到調用者的參數版本並且可以修改它。當sometype是一個指針時,它只是表示參數的調用者版本的類型是一個指針,並且該函數可以修改該指針。

相關問題