[英]What does it mean to pass a pointer parameter by reference to a function?
我在網上閱讀了一些代碼,發現它們傳遞了node*&
而不僅僅是node*
,我真的不明白為什么。
我的理解是,當您希望將更改傳播回函數外部的原始變量(指針會這樣做)或者希望避免每次調用函數時都復制對象時,您可以通過引用傳遞參數避免復制開銷,這也是指針會做的事情。
我錯了還是他們錯了? 如果我是,我有什么問題?
當您通過引用傳遞時,它充當別名——無論是普通對象還是指針。
為了詳細解釋,讓我們考慮以下聲明:
int i = 10, *pi = &i;
下面是在各種函數中傳遞和使用它們的不同含義:
void foo_pointer (int* p) // 1st (can pass `&i` and `pi`)
{
*p = 0; // modifies `i`
p = nullptr; // no effect on `pi`
}
void foo_pointer_reference (int*& p) // 2nd (can pass `pi`)
{
*p = 0; // modifies `i`
p = nullptr; // modifies `pi`
}
void foo_const_pointer_reference (const int*& p) // 3rd (can pass `pi`)
{
*p = 0; // ERROR
p = nullptr; // modifies `pi`
}
void foo_const_pointer_const_reference (const int* const& p) // 4th (can pass `&i` and `pi`)
{
*p = 0; // ERROR
p = nullptr; // ERROR
}
從上面的示例中,您可以看到將T*&
聲明為函數參數的另一個用例是,它僅限制傳遞給該函數的指針。 即在上述情況下&i
不允許傳遞給第二個和第三個函數。 但是pi
可以傳遞給所有函數。
如果您希望調用的函數將指針更改為指向其他內容,則可以通過引用傳遞指針。 除此之外,我看不到任何正當理由(但這有時是正當理由)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.