這是什麼意思?我明白通過引用傳遞參數是爲了傳遞引用,所以你可以直接修改它,而不需要返回,傳遞指針是相似的,但運行時間較慢。但是,我不明白什麼是* &。例如,什麼是「通過*&」的?
foo(int * & var) { }
這是什麼意思?我明白通過引用傳遞參數是爲了傳遞引用,所以你可以直接修改它,而不需要返回,傳遞指針是相似的,但運行時間較慢。但是,我不明白什麼是* &。例如,什麼是「通過*&」的?
foo(int * & var) { }
它通過引用傳遞指針,以便您可以更改指針指向的內容並將這些更改反映到調用方。
例如:
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
}
這樣就可以通過引用傳遞的指針。這使得函數有機會修改指針,並讓調用者看到該修改。
你不需要停在那裏。例如,可以通過引用傳遞指向int的指針的指針。
void foo(int** &var)
請記住,鍵入像&
和*
預選賽是相互獨立的。當你看到some_type&
時,它僅僅意味着「引用sometype
」,這又意味着該函數看到調用者的參數版本並且可以修改它。當sometype
是一個指針時,它只是表示參數的調用者版本的類型是一個指針,並且該函數可以修改該指針。
我不知道你去哪裏「通過指針是相似的,但運行速度較慢」。對於所有意圖和目的,通過指針或引用傳遞對象的性能是相同的(並且通過引用傳遞通常使用指針下的指針來實現)。 –